搜档网
当前位置:搜档网 › Hibernate映射文件中Cascade和Inverse浅析

Hibernate映射文件中Cascade和Inverse浅析

嗣国团圆汪团揣蒜鬻函神州酬。b

H i ber nat e映射文件中C as cade和I nver se

严科磊啦郝平1贾为3

(1、浙江工业大学信息学院,浙江杭州3100242、宁波市江东区实验小学,浙江宁波315040

3、宁波市江东区教育局教研室。浙江宁波315040)

信息技术浅析

摘要:H i bernat e是一个开放源代码的对象关系映射框架,它对J D B C进行了轻量级的对象封装,使得J ava程序员-f f r X随心所欲的使用对象编程的思维来操纵数据库。使用H i ber nat e的前提是要正确配置对象关系映射文件,本文就映射文件中级联(C as eeade)、关系维护(Inve rse)两个属性进行了详细的分析并给出了应用实例。

关键词:H i ber nat e;C asecade;I nver se

1引言

H i ber nat e是一种对象持久化工具,它负责J ava对象和关系数库之间的映射。H i be卜hat e内部封装了JD B C访问数据库的操作,向上层应用提供了面向对象的数据访问A PI。在J ava应用中使用H i bernat e包含以下步骤:创建H i ber nat e的配置文件,也就是告诉H i—ber nat e,底层数据库的信息,包括数据库名称、端L J、地址、用户名、密码等;然后根据系统需求,创建持久化类;再创建对象——关系映射文件;最后编写访问数据库的代码。其中创建对象——关系映射文件是应用H i bernat e 能否成功的关键步骤.映射文件中属性的配置正确与否将会直接影响到将要生成的系统的整体性能。

2级联(C aseeade)问题及其解决方案

C a se ea de用来说明当对“主对象”进行某种操作时是否对其关联的“从对象”也做类似的操作.常用的C as ec ade有none,al l,8a ve—up dat e,d e l et e。lock,r ef r es h,evic t,re pli e at e,

per si st,m er ge,del et e—or phano一般对m any—t o-one,m any—t o—m a ny不设置级联,在中设置级联。举个例子,学生类(S t udent)和该学生对他人的评论类(C om m ent)是一对多的关系,常常町以设置级联,学生类(S t udent)对应的对象——关系映射文件(st udent.hbm.xm l)中的一段代码如下所示:

</key>

</set>

从中可以看出学生类(S t udent)是“主对象”,学生对他人的评论类(C om m e nt)是“从对象”.如果学生由于某种原因.如毕业.要从系统中删除,那么与他相关的评论类也失去了它存在的意义.也应该随之删除.在业务逻辑方法中.只要删除学生类【st udent D A O.de l Pt e (st udnet)).配置了casca de=“del e t e”的从对象(com m ent S)也将删除.这样就节省处理“从对象”的很多代码.但足并不是所有的一对一或一对多的属性对象都要设置级联关系。最终应用取决于业务逻辑。

一26一中国新技术新产品

总之,是否需要设置级联,我们应用从这

样的两个角度去思考:“从对象”足否只与一

个“主对象”有关系,如果“从对象”还有L j其

他的对象有联系的话,就不应该没置级联;如

果“主对象”不存在了,那么“从对象”足否还

有存在的意义,如果有.就不成该设置级联。

不设置级联.代码量增加了,代码可读行也变

好了,但是牺牲了我们的效率。

3关系维护(Inver se)问题及其解决方案

l nvem e表示是否放弃维护两个对象之间

的关联关系,反应在数据库操作上是:是否放

弃维护两个数据表之间的外键关联关系。与

之不同的是C as cade处理的是整个对象,反

应在数据库操作上是:处理数据表中的一整

条记录,而不单单是一个外键。在hi be rna t e中

i nve rs e的缺省值是f al se,即不放弃维护两个

对象之间的关联关系。但是为了提高系统的

运行效率,往往在~-X寸多的一端放弃维护两

边之间的关联关系,如同上面的例子,学生类

(S t udent)和学生对他人的评论类(C om m ent)

是一对多的关系,学生类放弃了维护s t udent

数据表和com m ent数据表这两个数据表之间

的外键关联关系,学生类(St udent)对应的对

象——关系映射文件(st ude nt.hbm.xm l)中的

一段代码如下所示:

e as ca de=”de le te’’>

nu l l=”t r u e”,>

</key>

cai.d om ai n.C om m ent”,>

</s e t>

在业务逻辑方法中。

方法时

cl as s=”en.yankel ei

如果出现类似以下

st udent.set C om m ent s(com m ent s);

假定此时st udent处于持久态,并且整个

事务中没有产生异常而回滚.H i ber nat e就不

会产生updat e方法去更新与此s t udent有关

的com m ent表中的外键。如果设置成i n—

ver s e=”f a l鸵”或默认.即学牛类维护st uden t数

据表和com m ent数据表这两个数据表之间的

外键关联关系,那么H i bernat e就会自动产生

与oom n舱nl s集合(set)个数相同的updat e方

法.去更新oom m ent表中的与此s t udent相关

的外键。这样的操作常常是无实际意义的,也

使H i bernat e对库表操作变得复杂而又

效率低下。

相反在C om m ent的映射文件中,对s t u—

dent的i nver se设置成r默认值,即不放弃维

护两个对象之间的关联关系,评价类(C om—

m ent)对应的对象——关系映射文件(cor n~

m ent.hbm.xm l)中的一段代码如下所示:

yankel ei.cai.dom ai n.S t udent”f et ch=”s el ect”

l az y=”f al se”>

nu l l=”t r u e”,>

</m any-t o-one>

在业务逻辑方法中,如果出现类似一下

方法时

com m ent.s etSt udent(s t udent);

假定此时com m ent处于持久态,com m ent

表中已经存在此com m ent对象相关的记录,

并且整个事务中没有产生异常而【口l滚,H i—

ber nat e就会产生updat e方法去更新与此

com m ent对象有关的com m ent表中的s t udent

外键,只会参数一条updat e语句。这样的设

置,使得对对象的操作,就是对此对象所映射

的表的操作,直观而高效。

总之,I nve rs e关系正确设置与否。将会

直接影响到H i ber nat e产生updat e语句的多

少,以及updat e语句产生的实际效果与否符

合系统的业务需求。

4总结

H i ber nat e的使用,使得以面向对象的方

式来操作数据库变得及其简单,使得开发效

率更高,但是只有正确理解了H i ber nat e的使

用规范及其配置细节和原理。才能让它更好

的为我们服务。

参考文献

【l】李刚.整合St r ut s+Hi ber na t e+Spr i ng开发应

用详解fM】,北京:清华大学出版社,2007

12|传智播客H i ber nat e视频教程讲师:李勇

13】夏昕,曹晓钢.唐勇.深入浅出H i be r nat e[M】

.北京:电子工业出版社2005年06月

相关主题