1

我想做这个:

人<--多对多---> 人

我想建立一种关系,一个人可以有很多(不止一个)父母,而一个父母可以有很多孩子(不止一个)

我的休眠映射

@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 的子集合。

4

1 回答 1

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。)此外,您可能对使用以下注释而不是使用以下注释来抑制 JSON 序列化的更好方法感兴趣@JsonIgnore

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

@JsonManagedReference
private Set<Person> child = new HashSet<Person>();
于 2013-10-18T20:30:53.850 回答