Hibernate批量更新数据问题

今天在做一个项目中遇到一个问题,描述如下:
需要对一批满足条件的数据进行批量操作,如果符合条件,则批量更新,不符合条件则不提交,但是每次在不满足条件的情况下都会进行数据更新,查询相关资料发现。hibernate在关闭session时候会对内存中的持久化对象进行检查操作,也就是说 如果内存中的持久化对象跟数据量中的对象内容不一致时,hibernate不管你是否update都会进行更新操作。
解决方法如下有两个
方法一:对这批数据的PO类进行深度克隆;
首先po对象需要继承java.lang.cloneable接口,实现clone方法,代码如下

public Object clone(){
try{
return super.clone();
}
catch(CloneNotSupportedException ex){
return null;
}
}

在程序代码中
object =object.clone();

这样就完成了深度克隆,防止hibernate提交数据
方法二、每次查询出一条数据之后调用getSession().evict(obj);进行状态更改,由持久态-->游离态,这样在关闭时候 如果显式调用hibernate的话进行状态更新,否则不会进行进行数据库更新
总结:这个例子虽然很简单,但是对于理解hibernate的工作原理是很个很典型的例子,记录下方便以后查阅。

你可能感兴趣的:(JAVA)