[英]how to define an inverse cascade delete on a many-to-one mapping in hibernate
我有兩個類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>
A沒有任何映射到B.記住這一點,我們打算在刪除關聯A時刪除B. 如果我可以在B中的多對一關聯上定義inverse =“true”,那么這可能是可能的,但是hibernate不允許這樣做。
有人能幫忙嗎? 我們不想為此寫任何東西。
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>
請注意,設置cascade="delete"
上B
,你必須在你原來的代碼不會做你想要的東西-它告訴Hibernate這很可能導致約束違反“如果B被刪除,刪除A”(如果有任何與A)相關的其他Bs。
如果你絕對不能將A的集合添加到A(雖然我不能真正想到那種情況),你唯一的另一種選擇是在外鍵級別定義從A到B的級聯刪除; 刪除A后,您的B將被刪除。
但是,這是一個相當丑陋的解決方案,因為您必須非常小心如何在Hibernate中刪除A:
我認為你需要從A到B的cascade="all,delete-orphan"
與one-to-many
關聯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.