2012-04-26 66 views
0

考虑下面的代码:休眠:脏实体获取持续状态

MyEntity e = dao.getEntity(1); 
e.setProp1(someVal); 
e.setProp2(otherVal); 

MyEntity eOld = dao.getEntity(1); 

如果我不喜欢这样,那么E将得到更新(因为Hibernate检测它是脏)和EOLD将具有相同的属性值( prop1,prop2)a。有没有办法获得这个脏实体的持久状态(就像它在数据库中一样)?

回答

0

其实我可能已经找到了解决办法自己...

我已经尝试驱逐EOLD但不会使,因为我需要检索EOLD前驱逐e和之后的比较(用于审计)再次将e重新附加到会话中。 它似乎在任何情况下工作。

2

尝试:

<property name="defaultAutoCommit" value="false" /> 

或选择使用detach当重新连接准备坚持。

dao.detach(e); 
... 
e.setProp1("AnotherVal"); //not propatated to the database 
dao.merge(cat); // update 
+0

TX,但我希望的那么激烈:-) – 2012-04-26 19:42:13

+0

使用分离,当你准备好传播的替代合并的东西。 – Bitmap 2012-04-26 19:56:58

+0

是的,这是我第一次的做法,但我放弃了,因为这样我必须驱逐(分离)在我的控制器,而不是我的服务(因为性质在控制器设置)。但如果服务后驱逐行不通,我可能不得不回到这一点。 – 2012-04-26 20:16:06