hibernate中inversecascade属性(转).docVIP

  • 2
  • 0
  • 约7.98千字
  • 约 10页
  • 2017-06-12 发布于北京
  • 举报
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)

1亿VIP精品文档

相关文档