栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在休眠中的多对一映射上定义逆级联删除

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在休眠中的多对一映射上定义逆级联删除

休眠仅沿着定义的关联进行级联。如果A对B不了解,那么您对A所做的任何事情都不会影响B。

因此,Pascal的建议是您要做的最简单的方法:

<class name="A" table="tbl_A">  ...  <set name="myBs" inverse="true" cascade="all,delete-orphan">    <key column="col1"/>    <one-to-many />  </set></class><class name="B" table="tbl_B">  ...  <many-to-one name="a"  column="col1" not-null="true"/></class>

请注意,在原始代码中

cascade="delete"
B
原样打开将不会执行您想要的操作-
它告诉Hibernate“如果删除了B则删除A”,这很可能会导致约束冲突(如果还有其他B链接到该A )。

如果您绝对不能向A添加B的集合(尽管我真的不认为会是这种情况),那么您唯一的另一种选择是在外键级别上定义从A到B的级联删除。当您删除A时,您的B将被删除。

但是,这是一个非常丑陋的解决方案,因为您必须非常小心如何在Hibernate中删除A:

  1. 必须先刷新会话,然后才能删除A(对B的待定更新可能会导致错误,或者A和某些B在后台重新插入)
  2. 链接到您的A的所有B(并且由于您未从A端维护关系,这意味着 所有 B)必须从所有活动会话和2级缓存中逐出。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/483432.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号