繁体   English   中英

如何同时实现多父映射和多子映射?

[英]How to implement both multi-parent and multi-child mapping?

我有一个Category ,其中每个类别可以有多个孩子(下层类别)和多个父母(上层类别)。

我映射这是以下方式:

@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;

我发现Hibernate使用下表对这个实体进行了编码

CREATE TABLE
category_category
(
    Category_Url VARCHAR(255) NOT NULL,
    parents_Url VARCHAR(255) NOT NULL,
    childs_Url VARCHAR(255) NOT NULL,
    PRIMARY KEY (Category_Url, childs_Url),
    CONSTRAINT FK8635931F3275D6D7 FOREIGN KEY (Category_Url) REFERENCES category (Url) ,
    CONSTRAINT FK8635931F569C2962 FOREIGN KEY (parents_Url) REFERENCES category (Url) ,
    CONSTRAINT FK8635931F6ADF3430 FOREIGN KEY (childs_Url) REFERENCES category (Url),
    CONSTRAINT parents_Url UNIQUE (parents_Url),
    CONSTRAINT childs_Url UNIQUE (childs_Url),

这是绝对错误的,因为某一行的孩子和父母之间没有亲戚关系,因此不应包含在一个元组中。

我想休眠将创建两个表category_category_1(Category_Url,childs_Url)category_category_2(Category_Url,parents_Url)与从与this给孩子的,另一个-从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>(); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM