读书人

HQL的批量修改 不同值有关问题

发布时间: 2013-10-21 17:00:48 作者: rapoo

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

读书人网 >J2EE开发

热点推荐