关于hibernate 直接调用flush 如何让 hibernate 自动check version number的问


在hbm.xml文件里面已经配置了

......
<version column="VERSION_NUM" name="versionNum" type="integer" unsaved-value="null"> </version>
xml 片段
 
  1. <"VERSION_NUM" name="versionNum" type="integer" unsaved-value="null"/>  

......

问题是这样的,, 我要update一个表, 比如是 User表, 我第一步就先去出来记录user1, 然后将user1里面的对应的值set到页面的form中, 其中也包括user1当时取出来的version number.  比如说有两个人(张三, 李四)同时修改user1这条记录, 再假设user1这个记录开始的version number是4.

张三 先取出来user1记录想要进行update操作, 这时候数据库中user1的version number是4, 并且user1取到页面form中的version number 值也是4.

然后 李四也取出来了 user1记录, 同样 user1在数据库中的version number也是4, 取到页面表单中的version 值也是4. 不过李四先过张三提交了修改. 经过李四修改后, 数据库中的version number已经变成了5.

如果现在张三提交修改,按照道理应该是不可以成功的..不过我代码如下面这样写却不行,, 我只能显式的调用 session.merge() 方法才行..

我的code
java 代码
 
  1. UserVO userPO = userDAO.getByPk(user.getId());  
  2. userPO.setUserName = user.getUserName();  
  3. ......  
  4. userPO.setVersionNum(user.getVersionNum()); // 这里的user.getVersionNum()是保存在页面表单里面的值  
  5.   
  6. roleDAO.flush(); // 实际上就是调用 session.flush();  

如果向上面这样的代码,, 张三还是可以update成功,, 比较想不通, 难道hibernate不知道用我给的version number先去 check一下??

不过我如果把上面的roleDAO.flush();改成 roleDAO.merge(userPO); 就可以用我给的version先check了.. 真是搞不通了... 不知道各位在用hibernate的时候这种情况是怎么处理的.. 给我一点建议吧.. 谢谢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值