2017-07-06 48 views
0

嗨我需要爲JPA存儲庫編寫junit測試用例。代碼如下。爲JPA存儲庫編寫junit

測試寫成如下。我已經在類上添加了@ContextConfiguration。

@Autowired 
@Qualifier("repository") 
private Repository repository; 

@Test 
public void testCreate() { 
    Object objRequest = getObjForRequest(); 
    Object obj = repository.create(objRequest); 
    assertTrue(obj.getId().equals(objRequest.getId())); 
} 

private Object getObjForRequest() { 
    Object obj = new Object(); 

    obj.setId(1); 

    return obj; 
} 

我的知識庫寫成如下。

@Repository("repository") 
public class Repository implements RepositoryInterface { 

     @PersistenceContext 
     private EntityManager entityManager; 

     @Transactional(value = "springJpaTransactionManager") 
     @Override 
     public Object create(Object obj) { 
      Object ob = obj; 
      entityManager.persist(ob); 
      entityManager.flush(); 
      return ob; 
     } 
} 

當我運行測試用例時,它給了我下面的錯誤。

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist:com.*.*.Object 

任何人都可以幫我解決這個問題。

感謝

回答

1

刪除SETID來自:

private Object getObjForRequest() { 
    Object obj = new Object();  
    obj.setId(1);  
    return obj; 
} 

你不應該設置ID,如生成的ID,當對象成爲持久ID DB。當你用id調用repository.create(objRequest)時,spring數據會檢查它應該是什麼 - 創建新對象或更新存在,並且此檢查基於id!= null;

你應該檢查:

assertNoNull(obj.getId()); 
    assertTrue(obj.getId().longValue()>0); 

預期只有當你更新了一些存在的實體,您可以比較ID。

+0

這只是一個愚蠢的錯誤!謝謝你的伴侶! –