首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

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

2013-10-21 
HQL的批量修改 不同值问题hql批量更新比较常用的 public int updateAge(int id, int age) {Session sessio

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

热点排行