为 JPA 存储库编写 junit
Write junit for JPA repository
您好,我需要为 JPA 存储库编写 junit 测试用例。代码如下
测试如下。我已经在 class.
上添加了 @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("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
谁能帮我解决这个问题。
谢谢
从 :
中删除 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。
您好,我需要为 JPA 存储库编写 junit 测试用例。代码如下
测试如下。我已经在 class.
上添加了 @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("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
谁能帮我解决这个问题。
谢谢
从 :
中删除 setIdprivate 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。