2012-01-16 43 views
2

我有一個A級:Hibernate單向@ManyToMany:刪除沒有約束違規?

@Entity 
public class A { 
    ... 
    @ManyToMany 
    private Set<Ref> refs = new HashSet<Ref>(); 
    ... 
} 

和A類編號:

@Entity 
public class Ref { 
// no link to A 
} 

我想刪除A和A_Ref但參考,但我得到一個org.hibernate.exception.ConstraintViolationException

是否有一個簡單的方法來做到這一點,或者我應該明確創建一個A_Ref類?

感謝

編輯: 我試圖在HQL刪除一個直接的名單。我做了它的對象(打破了關係),它工作(級聯+孤兒刪除)。

回答

1

我不確定,如果我對你有所瞭解,但是從我理解我的第一個猜想是,你還沒有使用所有必要的註釋來確保hibernate會自動刪除Ref中的必要引用。

在manyToMany關係中,可以使用joinTables和cascadetypes來確保hibernate知道刪除所有必要關係的位置,而不必爲其創建自己的domainObject。

有很多不錯的指南如何管理它。在第一次查看從mkyong指南看起來不錯。注意:他註釋了getters而不是變量聲明! (這只是一個味道問題)。

+0

「參考」表是一個參考,從許多其他類鏈接的數據。所以我不能聲明雙向@ManyToMany(就像你在教程中所說的那樣)。 joinColumn是如果你想覆蓋默認設置,但我沒有在那裏看到相關的屬性。 – 2012-01-16 17:24:49

+0

我不確定,如果它甚至有必要,只要你只想在你的對象A中使用它的一個方向。重要的是自動刪除引用是CascadeType屬性。在答案中添加了對cascadetypes的引用。 – crusam 2012-01-16 17:32:15

相關問題