现在的项目客户有个要求:不希望更新记录时要一条一条的点击弹出修改。于是做了一个类似于Excel形式的修改cell,然后更新全部记录。(当然记录数不是很多)
在对于一条一条修改时,系统在并发请求中可以使用hibernate乐观锁的version字段来判断锁定某条记录。那请问我现在是一次更新很多条怎么加锁呢?

解决方案 »

  1.   

    还是一样的,进入修改页面前取数据时循环加琐(你提到记录数不多),其实关键的还是搞清楚hibernate乐观琐的大致原理后,完全可以写自己的加琐方法,并不见得非要用她的version,
    表上加1个字段XX来控制版本,只需要确定的是,在提取原数据时获取的XX的值 与 提交修改时XX的值相一致,侧可以提交修改,(hibernate上的版本号递增的方式并不是唯一固定的模式)比如,用多位随机数(这个类自定义)来填充字段XX的值,提数据时批量提取待修改数据的id和XX放入键值对list(此list为dao的私有成员变量),修改时依次检查对应的id和XX的值,一致侧提交,如否回滚,
      

  2.   

    简单说就是批量修改,如楼上两位所言,必然是用循环的,加锁的问题是hibernate框架给你处理的,这方面你不用自己去管,就像java回收机制一样,释放内存跟你没什么关系,知道有这么回事就可以;
    t = session.beginTransaction();
    Iterator it = session.find("from User where id between"+ begin +"and"+end).iterator();
    //你说的那个拖拽得到的id集;
    while(it.hasNext()){
    User u=(User)it.next();
    u.setAge(u.getAge()+1);
    session.evict(customer);
    }
    tx.commit();
    session.close();这样据OK啦;如果是spring+hibernate就更简单了;
    getHibernateTemplate().saveOrUpdateAll(list);