当前位置:编程学习 > JAVA >>

hibernate 的乐观锁问题:当有多条sql语句提交的时候,如果其中一条sql语句出现版本不对的问题,是否影响其他sql语句的提交

项目里面用到的是spring和Hibernate的集成,项目有一个这样的需求:同时提交多条update(object)语句,现在object是乐观锁版本控制,如果我其中一条update语句版本小于数据库版本,那么提交的过程中是否影响其他的update语句。
例如:
session.beginTransaction();
session.update(A);//A语句
session.update(B);//B语句
seesion.update(C);//C语句
session.commit();//在提交的时候,假如B语句出现版本问题,那么会影响A、C语句的成功提交吗?
急,请哪位老兄解答一下 java hibernate 事务 乐观锁 版本控制 --------------------编程问答-------------------- 你所有的更新都是在一个事务里,
其中某一条因为乐观锁报错了,
这样整个事务就会回滚,
其他的更新当然也不会成功。

如果你想不影响,可以做一条记录一个事务。 --------------------编程问答-------------------- 我们把这个问题这么看,我来批量提交,每一个更新语句就是一个事务,其中一条更新语句出错不影响其他语句的提交。这个现象我在oracle的测试过,多个update语句提交时,其中一条出现错误,但是其他update语句更新成功了。你是否有这样方案? --------------------编程问答-------------------- 我明白你的意思,或者你可以这样做:
在一个事务中,
对每句SQL,都try catch一下,如果报错就录下日志,
最后事务一起提交应该是可以满足你的要求的。 --------------------编程问答-------------------- 我用hibernate和spring集成的,是不是这样子:

for(A a : as){
try{
   session.update(a);
}catch(){
}
}
session.commit();


你看这样的思路可以吗? --------------------编程问答-------------------- 版本问题是否会出现违例?
如果不能的话,就不会“影响”其它的操作。 --------------------编程问答-------------------- 你用spring和hibernate集成,事务交由spring控制,那就比较简单了,如果你想A,B,C,D四个对象的update不互相影响,那你就把session.update单独写到一个方法,然后用@Transactional(propagation=REQUIRES_NEW)那么大家都在自己的事务里面了。互补影响,如果你要他们互相影响,把propagation删了就行了。
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,