hibernate中的多对多自引用关联

时间:2013-10-18 17:23:12

标签: java spring hibernate hibernate-mapping

我想这样做:

人< - 多对多--->人

我希望有一个关系,一个人可以有很多(不止一个)父母,一个父母可以有很多孩子(多一个)

我的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>();
}

这种映射是否正确?如何使这种关系双向化。所以,如果我添加一个父。应该更新Parent的子集合。

1 个答案:

答案 0 :(得分:1)

如果不确定您的问题是什么,我相信您可能会遇到问题,因为您没有为“拥有”这一关系设置“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>();