2011-10-17 67 views
1

我有一個單一的對象上的許多一對多的關係與自身:Hibernate多對多自引用,如何刪除無級聯?

<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表中刪除關係,而不是相關的Person自己。當我嘗試刪除這個映射時,我得到了 ConstraintViolationException:無法執行JDBC批量更新....

我猜測,它有點可能通過適當設置一些映射標誌(或者我必須做一些奇怪的解決方法,例如,首先從第一人刪除第二人,從第二人刪除第一人,然後刪除第一....我真的不想這樣做:D)

感謝所有的幫助!

回答

4

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

要麼通過HQL查詢來完成此操作,而要從Java中找到的人員集合中刪除A,或者使用專用SQL刪除查詢以刪除連接表中的所有行。但請注意,此SQL查詢將繞過緩存(第一級和第二級,如果有),並且您的會話可能因此存在數據庫的錯誤視圖。