簡體   English   中英

Hibernate多對多自引用,如何刪除沒有級聯?

[英]Hibernate many-to-many self-reference, how to delete without cascade?

我對一個單獨的對象有多對多的關系:

    <set name="relatedPersons" lazy="false"  table="PersonRelatedPerson" 
           cascade="none" >
    <key column="personId" foreign-key="fk_related_person" not-
        null="false"/>
       <many-to-many column="relatedPersonId" class="Person" not-found="ignore"/>
    </set>

正如你所看到的,我已經將級聯設置為“無”,因為當我刪除一個人時,當然我只想刪除表PersonRelatedPerson中的關系,而不是相關人員他們自己。 當我嘗試使用此映射進行刪除時,我得到ConstraintViolationException:無法執行JDBC批量更新....

我猜測通過正確設置一些映射標志(或者我必須做一些奇怪的解決方法,例如。首先從第一人的集合中刪除第二人,從第二人集中刪除第一人),以某種方式可以通過休眠刪除它。然后先刪除....我真的不想這樣做:D)

感謝所有的幫助!

你只需要自己刪除這些關系。 要做到這一點,在移除A人之前,您必須找到所有在相關人員組中擁有A的人,並從這些集中刪除A. 如果你不這樣做,那么你當然不能刪除A,因為其他人仍然參考A.

使用HQL查詢執行此操作並從Java中找到的人員集中刪除A,或使用專用SQL刪除查詢從聯接表中刪除所有行。 但請注意,此SQL查詢將繞過緩存(第一級和第二級,如果有),因此您的會話可能會保留錯誤的數據庫視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM