Java 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

我想这样做:

个人

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

我的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>();
}
@实体
班主任{
@身份证
@纵队
长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在一起。但这个问题并没有得到解决。