我需要知道uniqueResult()
是否返回一个新对象,换句话说,内部是否malloc()
?
因为我比较对象的内存地址时测试失败了。
sameObjectButRetrievedByHibernate = sess.createCriteria(Object.class)
.add(Restrictions.idEq(someId)).uniqueResult();
...
assertTrue(objetcCreatedByNewAndPersisted == sameObjectButRetrievedByHibernate);
无论对象是否已加载到内存中,Hibernate都将始终返回副本?
答案 0 :(得分:2)
Java中的对象不是由内部malloc
创建的,它们存储在已预先分配的堆内存中。
关于你的问题,如果一个实体实例已经在持久化上下文(Hibernate会话)中,那么它将被使用,否则将创建一个新实体。
因此,您要么在新会话中读取实体实例,要么在持久化实例后清除当前会话。