日期:2014-05-20  浏览次数:20757 次

Hibernate的保存问题
各位,大家好。因为公司需要,所以新的项目都数据持久化层改为hibernate。对hibernate不是很熟悉。请大家帮忙看一下我的问题。
比如我在一个方法里先查询出一个A a been.
对这个对象进行一些属性修改a.setUser("XXX");
之后我再我要保存B been的一条数据到数据库。但却发现它顺便帮我update了a的刚刚那条纪录。
我发现如果我不对查出的a对象进行修改,先保存B的,然后再a.setUser("XXX"),这样就不会帮我顺便update a.
我觉得奇怪A和B是不同表的,不同的been,两个表是没有关联的。我只是想保存B的.并不想update a的对象。但hibernate却做了update。
请问这是什么原因呢?谢谢

------解决方案--------------------
这与事务提交的时机有关 查出的对象会交给Session的一级缓存管理 在这个缓存里的对象Hibernate 会自动与数据库保存同步 所以提交事务之前对对象的修改都能体现在数据库中 事务提交后 对象就不归Session管理了
------解决方案--------------------
回2楼:
用hibernate时要重点关注它的transaction,在transaction内应迅速完成任务,不做无意义的事情,一般不需要调用evict或者clear。既然你不想将对象属性的改变保存到数据库,为什么还要改变它呢,建议考虑用其它方法达到目的。