Java hibernate中的多对多自引用关联
我想这样做: 个人 我想建立一种关系,一个人可以有多个(不止一个)父母,一个父母可以有多个孩子(不止一个) 我的hibernate映射Java hibernate中的多对多自引用关联,java,spring,hibernate,hibernate-mapping,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 = "Pers
@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>();
}
@实体
班主任{
@身份证
@纵队
长id;
@纵队
字符串名;
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinTable(name=“Person\u Parent”,
joinColumns={@JoinColumn(name=“parent_ID”)},
inverseJoinColumns={@JoinColumn(name=“child_ID”)})
private Set parent=new HashSet();
@杰索尼奥雷
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinTable(name=“Person\u Parent”,
joinColumns={@JoinColumn(name=“child_ID”)},
inverseJoinColumns={@JoinColumn(name=“parent_ID”)})
private Set child=new HashSet();
}
这个映射正确吗?如何使这种关系具有双向性。因此,如果我添加一个父对象。应该更新该父对象的子集合。在不确定您的问题是什么的情况下,我相信您可能会遇到问题,因为您没有为关系的“拥有”端设置“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>();
在不知道你的问题是什么的情况下,我相信你可能会遇到问题,因为你没有为“拥有”关系的一方设置“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>();
你试过运行它吗?它起作用了吗?有例外吗?我们在这里不做代码审查(不是故意粗鲁),请解释您面临的问题,以便我们提供帮助。通常,您使用
@ManyToMany
注释中的mappedBy
属性映射反面,而不是再次指定映射细节。您可能还想命名字段parents
和children
,只是为了让代码更清晰。@AnanthaSharma是的,我在添加parent/child时得到无限递归。当那个人有另一个父母时。同样在双向映射中,当我添加父对象时,父对象的子集合应该得到级联,对吗?但不是。我试过和mappedBy在一起。但是这个问题没有得到解决。你试过运行它吗?它起作用了吗?有例外吗?我们在这里不做代码审查(不是故意粗鲁),请解释您面临的问题,以便我们提供帮助。通常,您使用@ManyToMany
注释中的mappedBy
属性映射反面,而不是再次指定映射细节。您可能还想命名字段parents
和children
,只是为了让代码更清晰。@AnanthaSharma是的,我在添加parent/child时得到无限递归。当那个人有另一个父母时。同样在双向映射中,当我添加父对象时,父对象的子集合应该得到级联,对吗?但不是。我试过和mappedBy在一起。但这个问题并没有得到解决。