- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
hibernate中inversecascade属性(转)
04
hibernate 中inverse cascade属性(转)
在hibernate中一对多关联时会经常用到inverse和cascade属性 ,inverse 有两个值 true ,false? ;如果设置为true 则表示对象的状态变化不会同步到数据库 ;设置false就相反拉;cascade 有五个选项 分别是: all ,delete ,none,save-update,delete-orphan ;??????? all : 所有情况下均进行关联操作。??????? none:所有情况下均不进行关联操作。这是默认值。??????? save-update:在执行save/update/saveOrUpdate时进行关联操作。??????? delete:在执行delete时进行关联操作。 ??????? delete-orphan:?当save/update/saveOrUpdate时,相当于save-update ;当删除操作时,相当于delete ;all的意思是save-update + deleteall-delete-orphan 的意思是当对象图中产生孤儿节点时,在数据库中删除该节点all比较好理解,举个例子说一下all-delete-orphan:Category与Item是一对多的关系,也就是说Category类中有个Set类型的变量items.举个例子,现items中存两个Item, item1,item2,如果定义关系为all-delete-orphan当items中删除掉一个item(比如用remove()方法删除item1),那么被删除的Item类实例将变成孤儿节点,当执行category.update(),或session.flush()时hibernate同步缓存和数据库,会把数据库中item1对应的记录删掉
测试Hibernate中的三个属性:lazy,inverse,cascade
【测试环境】一对多关系的两张表:boy、girl(一个男孩可以多个女朋友)
?boy表结构?Field?? Type?????????------? -----------??name??? varchar(50)? pk?age???? varchar(50)?
?girl表结构?Field?? Type?????????------? -----------??name??? varchar(50)? pk?bf????? varchar(50)? fk
?ER图
?
【保存时:Inverse与cascade】
?创建三个girl对象和一个boy对象,让这是三个girl都是boy的女朋友
? ---------创建对象的代码片段-----------??Boy boy = new Boy(tom,23, null);
??Set girls = new HashSet();????Girl g[] = new Girl[]{?????????? ???????????? new Girl(Alice1, boy),????????????????????? ? new Girl(Alice2, boy),?????????? ???????????? new Girl(Alice3, boy)};??girls.add(g[0]);??girls.add(g[1]);??girls.add(g[2]);????boy.setGirls(girls);??在Boy.hbm.xml中设置,然后对boy对象进行保存。
?1.Inverse = true,不指定cascade?? cascade的默认值为none, 当对boy进行保存操作时,girl什么都不做. 所以只保存了boy对象, 没有保存girl对象
?2.Inverse = true,cascade=all?? boy与girl对象,包扩外键都成功保存。?? (生成3条SELECT语句和4条INSERT语句,一下简称SELECT 3, INSERT 4)
?3.Inverse = false,不指定cascade?? 报错。因为boy为主控方,负责维护关系,所以在插入boy对象后,会尝试修改并不存在的girl对象。
?4.Inverse = false,cascade=all?? boy与girl对象,包扩外键都成功保存。?? (SELECT 4, INSERT 4, UPDATE 3)
?? 分析:除了4条INSERT语句之外,其他的6条语句是我们为了图方便付出的代价:3条SELECT语句用来判断girl对象是否在数据表中已经存在,3条UPDATE语句
文档评论(0)