关于Hibernate执行查询后会引发update操作的解决方法


产生原因:hibernate 做持久化时get 和 set 值,发现get 值不同则做同步更新到数据库. 才会发生 查询后又做更新操作


1、使用session.lock(object, LockMode.NONE)

(1)、session.saveOrUpdate(object)。这语句会把游离态的PO转为持久态的PO并提交给数据库

(2)、session.merge(object)。这语句会把游离态的PO转为持久态的PO,并进行合并操作。

(3)、session.lock(object, LockMode.NONE)。这语句只会把游离态的PO转为持久态PO,不作其他操作。不过,PO必须是没有修改过的,这方法挺适合做一个应用层

2、添加事务处理机制

3、给set绑定dynamic-update="false"

4、因为hibernate对持久态的对象会进行自动的比较的。get出来的持久态的对象可以用session的evict(Object object)把这个对象变成脱管的就可以了。也就是说把持久态的转换成游离态就好


详细例子:

http://blog.csdn.net/woshisap/article/details/18602371(出自CSDN)

http://salouhim.iteye.com/blog/1277777(出自iteye)

http://www.linuxidc.com/Linux/2013-03/81601.htm(出自linux公社)


希望出现同样问题的小伙伴少走一点弯路


你可能感兴趣的:(java,sql,Hibernate)