Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate jpa entitymanager contains始终返回false_Hibernate_Jpa - Fatal编程技术网

Hibernate jpa entitymanager 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

我有一个简单的测试用例,保存一个对象,然后测试该对象是否存在于db中。但是contains方法总是返回false。对象保存在数据库中

 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