Hibernate jpa entitymanager contains始终返回false
我有一个简单的测试用例,保存一个对象,然后测试该对象是否存在于db中。但是contains方法总是返回false。对象保存在数据库中Hibernate jpa entitymanager contains始终返回false,hibernate,jpa,Hibernate,Jpa,我有一个简单的测试用例,保存一个对象,然后测试该对象是否存在于db中。但是contains方法总是返回false。对象保存在数据库中 User entity = new User(); entity.setName("test"); User result = ObjectManager.save(entity); boolean exists = ObjectManager.contains(result); assertTrue(exists); @O
User entity = new User();
entity.setName("test");
User result = ObjectManager.save(entity);
boolean exists = ObjectManager.contains(result);
assertTrue(exists);
@Override
public boolean contains(T obj) throws DataStoreException {
try {
return entityManager.contains(obj);
} catch (Exception e) {
throw new DataStoreException(e);
}
}
根据EntityManager: 检查实例是否为托管实例 属于对象的实体实例 当前持久性上下文 所以它不会检查它是否在数据库中。可能是您在save方法中分离了实体,或者它不在当前持久性上下文中
使用find或get来验证数据库中的存在性。您能给我一个测试用例,我可以用它来验证contains()方法吗。我的印象是,一旦您使用find获取对象,它应该处于托管状态。您的印象是正确的,它应该处于托管状态。但在“分离”一个实体时,它不再受管理。可以通过调用entitymanager.detach或entitymanager.clear进行分离。同时调用entitymanager.remove将从上下文和数据库中删除它。在所有这些情况下,如果调用contains,它将返回false