2013-10-18 105 views
1

自引用關聯我想這樣做:許多一對多處於休眠

人<大多都支援一對多--->人員

我希望有一個關係,其中一個人可以有許多(不止一個)的父母和一個家長可以有很多孩子的(不止一個)

我的Hibernate映射

@Entity 
class Person{ 

    @Id 
    @Column 
    long id; 

    @Column 
    String name; 

    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    @JoinTable(name = "Person_Parent", 
     joinColumns={ @JoinColumn(name = "parent_ID") }, 
     inverseJoinColumns = { @JoinColumn(name = "child_ID")}) 
    private Set<Person> parent = new HashSet<Person>(); 

    @JsonIgnore 
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    @JoinTable(name = "Person_Parent", 
     joinColumns={ @JoinColumn(name = "child_ID") }, 
     inverseJoinColumns = { @JoinColumn(name = "parent_ID")}) 
    private Set<Person> child = new HashSet<Person>(); 
} 

這是映射關係是否正確?如何使這種關係成爲雙向的。所以如果我添加一個父。父母的孩子收集應該更新。

+3

你嘗試過嗎?它工作?有什麼例外?我們在這裏不做代碼審查(不要試圖粗魯),請解釋您面臨的問題,以便我們提供幫助。 –

+0

通常情況下,您可以在'@ ManyToMany'註釋中映射反轉端與'mappedBy'屬性,而不是再次指定映射細節。您也可能想要命名「父母」和「孩子」字段,以使代碼更清晰。 –

+0

@AnanthaSharma是的,我做了,當我添加父/子時,我得到無限遞歸。當這個人有另一個父母。也在雙向映射,當我添加一個家長的子集合應級聯正確?但不是。我試着用mappedBy。但這個問題沒有得到解決。 –

回答

0

不確定你的問題是什麼,我相信你可能會遇到問題,因爲你沒有爲關係的「擁有」一方設置「mappedBy」值。例如:

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
private Set<Person> parent = new HashSet<Person>(); 

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="parent") 
private Set<Person> child = new HashSet<Person>(); 

(我已經刪除了@JoinTable爲簡潔起見)。此外,你可能有興趣在使用下面的註解,而不是@JsonIgnore抑制你的JSON序列化更好的方式:

@JsonBackReference 
private Set<Person> parent = new HashSet<Person>(); 

@JsonManagedReference 
private Set<Person> child = new HashSet<Person>();