Java 如何实现多父映射和多子映射?

Java 如何实现多父映射和多子映射?,java,hibernate,orm,Java,Hibernate,Orm,我有类别,其中每个类别可以有多个孩子(低级类别)和多个父母(高级类别) 我用以下方法绘制了地图: @Entity public class Category { @Id public String Url; @OneToMany private Set<Category> childs = new HashSet<Category>(); @OneToMany private Set<Category> parents = new HashSet<

我有
类别
,其中每个类别可以有多个孩子(低级类别)和多个父母(高级类别)

我用以下方法绘制了地图:

@Entity
public class Category {

@Id
public String Url;

@OneToMany
private Set<Category> childs = new HashSet<Category>();

@OneToMany
private Set<Category> parents = new HashSet<Category>();

@OneToMany(cascade=CascadeType.ALL)
private Set<Person> persons = new HashSet<Person>();

public String Title;

public boolean Done;
这是绝对错误的,因为某些行的child和parent彼此不相关,不应该包含在一个元组中

我假设Hibernate将创建两个表
category\u category\u 1(category\u Url,childs\u Url)
category\u category\u 2(category\u Url,parents\u Url)
,其中一个表与
this
儿童相关,另一个表与父母相关


为什么Hibernate会这样做,以及如何使其正确执行?

您可以使用
@JoinTable
为链接表指定不同的名称:

@OneToMany @JoinTable(name = "category_category_1")
private Set<Category> childs = new HashSet<Category>();

@OneToMany @JoinTable(name = "category_category_2")
private Set<Category> parents = new HashSet<Category>(); 
@OneToMany@JoinTable(name=“category\u category\u 1”)
private Set childs=new HashSet();
@OneToMany@JoinTable(name=“category\u category\u 2”)
private Set parents=new HashSet();

但为什么不自动执行?默认行为是什么?默认行为就是您所看到的-Hibernate只是将源实体名和目标实体名连接起来,因此当您在同一对表之间有多个关系时,必须使用
@JoinTable
。我想我可以从数据库概念中抽象出来。只要坚持波乔。
@OneToMany @JoinTable(name = "category_category_1")
private Set<Category> childs = new HashSet<Category>();

@OneToMany @JoinTable(name = "category_category_2")
private Set<Category> parents = new HashSet<Category>();