日期:2014-05-18  浏览次数:20765 次

HQL的批量修改 不同值问题
hql批量更新比较常用的
 
public int updateAge(int id, int age) {
  Session session = sessionFactory.openSession();
  Transaction tx = session.beginTransaction();
  String hql = "update Customer set age =:age where id =:id";
  int count = session.createQuery(hql)
         .setInteger("age", age)
         .setInteger("id", id)
         .executeUpdate();
  tx.commit();
  session.close();
  return count;
}

这时所有符合条件的记录都会改成相同的值(age = 10)
但要修改不同的id对应不同的age应 怎么写?
假设 MAP 作为参数传入
Map<Integer,Integer> map = new HashMap<Integer,Integer>();
map.put(1,18); id:1 age:18
map.put(2,19); id:2 age:19
map.put(3,20); id:3 age:20
......
已包含不用ID的age的值
像JDBC的PreparedStatement有个addBatch,  hql的应该怎么弄?

------解决方案--------------------
不同值的更新,必然每个更新需要单独一条Update语句;除非你所要更新的值,可以用SQL查询或计算得到。

批处理的话可以参见这里:
http://www.360doc.com/content/10/1012/17/2560742_60419315.shtml
------解决方案--------------------
即使你通过map传参的话,也只能针对一条一句进行。如果像你上面的map那样,后面id的值会把前面覆盖。
像楼上说的,批量跟新必须你更新 的值可以用SQL查询或计算