开发者社区> 问答> 正文

关于Hibernate3,根据ID进行批量修改应该如何操作

假设我有一个邮件的持久化对象:

class Mail{

private int id;
private int status;

}
从前台会传来一个id的数组:

List ids;
我需要把数据库中所有id匹配,并且邮件状态为1,改成状态2。
在Hibernate中如何处理比较好?单次操作量平均在1~100之间。
目前有几种思路:

1)一种是使用HQL语句进行批量修改

update Mail m set m.status = 2 where m.status = 1 and m.id in (id1, di2 .... idn)
这种方法中使用了in子句,一般情况下应该只会生成一条SQL语句,和服务器交互一次,但不知效率如何?
这种方法下完全没有利用到Hibernate的缓存优势。

2)使用for语句,将对象load出来,再调用set方法修改值

for(int id : ids){

Mail m = load(id);
m.setStatus(2);

}
这种情况下,若二级缓存里都已有数据,应该是有N条update语句,但只需要一次Batch的提交。
但是若其中有m条数据不在服务器中,那么似乎将会有m次的查询,外加一次的Batch提交update。

展开
收起
a123456678 2016-03-13 14:37:28 2989 0
1 条回答
写回答
取消 提交回答
  • 这种情况,不要用它本身提供的方式来更新啦,因为hibernate是orm模型,所以必须每隔对象都在内存中,然后一个一个去改,效率太差。直接用hibernate提供的运行hql的接口去运行自己写的HQL就好了。

    2019-07-17 19:02:35
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载