Mon*_*bal 18 java orm hibernate cascade
我有两个类A和B.许多B可以与单个A关联,因此从B到A的多对一关系.我已经映射了这样的关系:
<class name="A" table="tbl_A">
<property name="propA" column="colA"/>
</class>
<class name="B" table="tbl_B">
<property name="propB" column="colB"/>
<many-to-one name="a" class="A" column="col1" cascade="delete"/>
</class>
Run Code Online (Sandbox Code Playgroud)
A没有任何映射到B.记住这一点,我们打算在删除关联A时删除B. 如果我可以在B中的多对一关联上定义inverse ="true",那么这可能是可能的,但是hibernate不允许这样做.
有人能帮忙吗?我们不想为此写任何东西.
Chs*_*y76 24
Hibernate只沿着定义的关联级联.如果A对Bs一无所知,那么你对A做的任何事情都不会影响Bs.
因此,Pascal的建议是做你想做的最简单的方法:
<class name="A" table="tbl_A">
...
<set name="myBs" inverse="true" cascade="all,delete-orphan">
<key column="col1"/>
<one-to-many class="B"/>
</set>
</class>
<class name="B" table="tbl_B">
...
<many-to-one name="a" class="A" column="col1" not-null="true"/>
</class>
Run Code Online (Sandbox Code Playgroud)
请注意,设置cascade="delete"上B,你必须在你原来的代码不会做你想要的东西-它告诉Hibernate"删除,如果B被删除,"这很可能导致违反约束(如果有任何其他的烧烤链接到一个).
如果你绝对不能将A的集合添加到A(虽然我真的不能想到情况就是这样),你唯一的另一种选择是在外键级别定义从A到B的级联删除; 删除A后,您的B将被删除.
但是,这是一个相当丑陋的解决方案,因为您必须非常小心如何在Hibernate中删除A:
| 归档时间: |
|
| 查看次数: |
25396 次 |
| 最近记录: |