hibernate中inversecascade属性(转).docVIP

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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 + delete all-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)

kakaxi + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档