我有一个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照常执行,以及如何使其正确执行?

#1楼 票数:1 已采纳

您可以使用@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>(); 

  ask by Suzan Cioc translate from so

未解决问题?本站智能推荐:

1回复

具有相同类的Parent-Child的JPA映射

我有以下表格: 我想让Folder类具有父子关系。
2回复

在Hibernate中映射多级继承

目前我有这样的结构: 它使用连接表映射每个子类一个表。 由于历史原因,我也使用了鉴别器,所以目前的情况如Hibernate手册第9.1.3节所述 。 问题:如何扩展这样的结构的映射: 我可以在hibernate映射中<subclass>一个<subcla
1回复

如何正确实现@ManyToMany映射?

我不明白,应自动或不休眠的工作? 我有Category实体,其编码如下: 这将导致创建下表 这是不正确的,因为parents_Url不应是唯一的( parents_Url许多行具有相同的父级)。 如果我没有@JoinTable规范进行编码 那么我将有以下内容
2回复

Hibernate交叉引用同一类的多对多父/子映射

我在让父子关系用于单个类的层次结构时遇到了一个主要问题。 基本上,我必须像这样表示一个服务器树: 请注意,服务器B和E的子代是相同的。 我的原始映射是这样的,在我需要将服务器C和D的对象设为同一实例之前,这很好,所以上一次关系填充了PARENT_ID的单个列,而服务器B或E中只有一个
1回复

如何创建具有父/子关系的@Entity

我正在创建一个包含文章的网站; 每篇文章都会有评论。 这些注释将存储在“注释”表中,该表具有名为“ parent_id”的字段,该字段是同一表中字段“ id”的外键。 我希望使用Hibernate递归地获取特定文章的所有评论。 这是我的实体: 该代码可以正常工作,但是,当
1回复

使用JPA和Hibernate将单个父列表映射到子表的多个列

我正在尝试将单个父主键映射到多个子外键。 我有一个User表,其中包含不同类型的用户,例如,他们是admin类型,worker类型和client类型的用户。 然后,我有一个名为job的子表。 单个作业记录包含对管理员,工作人员和客户端主键的引用。 我尝试在休眠状态下映射此sinario,
2回复

JPA在同一父类中将相同的子关系映射两次(不同的基数)

给出2个对象,Person和Phone,其中他们的关系是Person(one)-Phone(很多)。 电话有可变类型,可以有4个可能的值:住宅,办公室,移动,传真。 是否可以在Person中将Phone关系映射两次,如下所示: 隔离的原因是有屏幕,我会显示手机号码,但不需要加载其
2回复

如何使用Hibernate在子列上设置上一个父ID

我有父母和子女实体: 问题是,每次创建父级时,我都需要在子级中更新lastParentId。 换句话说,在创建父对象之前,子对象已存在于数据库中,并且已将子对象“分配”给他。 并且在每个父项插入后,应使用新创建的父项ID更新子项的字段,并且该ID应该是该子项的最后一个。 换一种说法