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>();