Java UniqueResult()方法是否在hibernate条件查询中返回新对象?

Java UniqueResult()方法是否在hibernate条件查询中返回新对象?,java,hibernate,Java,Hibernate,我需要知道uniqueResult()是否返回新对象,换句话说,是否在内部生成malloc()? 因为当我比较对象的内存地址时,我的测试失败了 sameObjectButRetrievedByHibernate = sess.createCriteria(Object.class) .add(Restrictions.idEq(someId)).uniqueResult(); ... assertTrue(objetcCreatedByNewAndPersist

我需要知道
uniqueResult()
是否返回新对象,换句话说,是否在内部生成
malloc()
? 因为当我比较对象的内存地址时,我的测试失败了

sameObjectButRetrievedByHibernate = sess.createCriteria(Object.class)
                 .add(Restrictions.idEq(someId)).uniqueResult();
...
assertTrue(objetcCreatedByNewAndPersisted == sameObjectButRetrievedByHibernate);

Hibernate将始终返回一个副本,无论对象是否加载到内存中?

Java中的对象不是由
malloc
内部创建的,它们存储在已预先分配的堆内存中

关于您的问题,如果实体实例已经在持久上下文(Hibernate会话)中,那么将使用它,否则将创建一个新实例


因此,您要么在新会话中读取实体实例,要么在持久化该实例后清除当前会话。

您能再向我解释一下持久化上下文(Hibernate会话)吗。我的理解是,从我用org.hibernate.SessionFactory.openSession()打开会话开始,直到我用org.hibernate.session.close()关闭为止。是的,或多或少这就是概念。