我想这样做:
人< - 多对多--->人
我希望有一个关系,一个人可以有很多(不止一个)父母,一个父母可以有很多孩子(多一个)
我的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的子集合。
答案 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>();