论坛首页 Java企业应用论坛

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

浏览 3252 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-03-11  

在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的时候这种情况是怎么处理的.. 给我一点建议吧.. 谢谢
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics