关于乐观锁的问题

despotic 2009-03-09 12:49:41
现在的项目客户有个要求:不希望更新记录时要一条一条的点击弹出修改。于是做了一个类似于Excel形式的修改cell,然后更新全部记录。(当然记录数不是很多)
在对于一条一条修改时,系统在并发请求中可以使用hibernate乐观锁的version字段来判断锁定某条记录。那请问我现在是一次更新很多条怎么加锁呢?
...全文
86 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
然月枕流君 2009-03-11
  • 打赏
  • 举报
回复
简单说就是批量修改,如楼上两位所言,必然是用循环的,加锁的问题是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);
MavenTalk 2009-03-10
  • 打赏
  • 举报
回复
一条可以实现,多条就循环实现吧
heavenfeng 2009-03-09
  • 打赏
  • 举报
回复
还是一样的,进入修改页面前取数据时循环加琐(你提到记录数不多),

其实关键的还是搞清楚hibernate乐观琐的大致原理后,完全可以写自己的加琐方法,并不见得非要用她的version,
表上加1个字段XX来控制版本,只需要确定的是,在提取原数据时获取的XX的值 与 提交修改时XX的值相一致,侧可以提交修改,(hibernate上的版本号递增的方式并不是唯一固定的模式)

比如,用多位随机数(这个类自定义)来填充字段XX的值,提数据时批量提取待修改数据的id和XX放入键值对list(此list为dao的私有成员变量),修改时依次检查对应的id和XX的值,一致侧提交,如否回滚,

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧