hibernate3学习笔记(二十三)|进阶特性(一) - 编程入门网
teger(31));
tx1.commit();
// 此时由於资料更新,资料库中的版本号递增了
// 两笔资料版本号不一样了
System.out.println(" v1 v2 "
+ userV1.getVersion().intValue() + " "
+ userV2.getVersion().intValue());
// userV2 的 age 资料还是旧的
// 资料更新
userV2.setName("justin");
// 因版本号比资料库中的旧
// 送出更新资料会失败,丢出StableObjectStateException例外
tx2.commit();
session1.close();
session2.close();
hibernate3学习笔记(二十三)|进阶特性(一)(4)时间:2011-02-03运行以下的程式片段,会出现以下的结果:
由於新的版本号是1,而userV2的版本号还是0,因此更新失败丢出StableObjectStateException,您可以捕捉这个例外作善後处理,例如在处理中重新读取资料库中的资料,同时将目前的资料与资料库中的资料秀出来,让使用者有机会比对不一致的资料,以决定要变更的部份,或者您可以 设计程式自动读取新的资料,并比对真正要更新的资料,这一切可以在背景执行,而不用让您的使用者知道。 要注意的是,由於乐观锁定是使用系统中的程式来控制,而不是使用资料库中的锁定机制,因而如果有人特意自行更新版本讯息来越过检查,则锁定机制就会无效, 例如在上例中自行更改userV2的version属性,使之与资料库中的版本号相同的话就不会有错误,像这样版本号被更改,或是由於资料是由外部系统而来,因而版本资讯不受控制时,锁定机制将会有问题,设计时必须注意。 3.Lifecycle 介面、Validatable 介面: 可以在实体物件定义时实作Lifecycle介面,这个介面定义如下:
当物件实作Lifecycle介面时,会在save()、update()、delete()、load()等方法执行之前呼叫对应的onSave()、 onUpdate()、onDelete()与onLoad(),其中onSave()、onUpdate()、onDelete()与onLoad() 若传回true或丢出CallbackException,则对应的操作中止。 可以在实体物件定义时实作Va |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |