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

时间:2016-01-30 22:59:09

标签: java hibernate

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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