首页 > Hibernate实践 > inverse cascade
2010十月2

inverse cascade

<set name=”userPowers” inverse=”true”>
??? <key>
??????? <column name=”cid” />
??? </key>
??? <one-to-many />
</set>

inverse指定由谁控制,inverse = false,由自己控制关系。即当自己更新时,自动更新对方,而对方更新时,就不会自动更新自己。
cascade指定更新的权限,若不设置,在inverse = false时,已方任何改动都会反映到对方,若想进一步控制,可用cascade细分

cascade能设置的值有
all??????????????????????? 相当save-update加上delete
all-delete-orphan?? 相当all,并且会删除去父类失去关联的子类比如说Article.CommentList.RemoveAt(0),就会删除第一个子类
none??????????????????? 父类的操作不会关联到子类
save-update???????? 添加和更新进行级联操作
delete????????????????? 删除父类时,删除子类
delete-orphan?????? 删除父类时,删除父类没有关系的子类

<one-to-many>中,建议inverse=”true”,由“many”方来进行关联关系的维护 ,若设置one方为主方,则在删除时会自动删除子方,会删除大量数据。

<many-to-many>中,只设置其中一方inverse=”false”,或双方都不设置

参考实体类:person, son
one方:一个person对应多个son,son存在person的set中
many:一个son对应一个father
若双方都不设置inverse,都是受方
那么:?? Son为tom, Father为Davin,现在tom想改Father为Kax
son.setFather( Kax );
但:person.getSons().get( tom );仍会返回,指示Davin仍拥有tom,出现错误。
这里的关系指的是:one中一个与Set的关系???? 而many中一个与一个的关系, 将关系分成两部分,要指定一方来维护这种关系才可,否则须要手动编码来维护这种关系。

本文地址:http://enjoyasp.net/?p=1026 , 转载请保留.

本文的评论功能被关闭了.