我有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),
这是绝对错误的,因为某行的孩子和父母彼此不相关,不应该包含在一个元组中。
我想 Hibernate 会创建两个表category_category_1(Category_Url,childs_Url)
,并category_category_2(Category_Url,parents_Url)
与子关联this
和另一个关联 - 从this
与父母关联。
为什么 Hibernate 会这样做,以及如何让它正确执行?