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查询或计算