2

给定以下两个实体:

class Parent {
       @OneToMany(cascade=CascadeType.ALL)
       private Set<Child> children;

       (...)
}


class Child {
       @ManyToOne
       private Parent parent;

       (...)
}

我想要数据库中有两个表。一张给父母,一张给孩子。但是 Hibernate 创建了三张表:一张给父母,一张给孩子,一张给他们加入(有两个字段的表格)。

即使我@OneToOne在 Child 类中添加了 parent 属性,我仍然得到相同的结果。

我错过了什么?

4

3 回答 3

3

mappedBy属性添加到@OneToMany类中Parent。这使得Child成为拥有方。

在字段中Child添加@JoinColumn注解parent,以便在子表中声明外键列名。

从 JavaDoc 开始@OneToMany#mappedBy

拥有关系的字段。除非关系是单向的,否则是必需的。

单向关系需要一个连接表,但在您的情况下它是双向的,因此它是必需的。

于 2011-08-04T10:54:53.273 回答
2

注释中的mappedBy="parent"属性缺少用于构建双向关联。

class Parent {
   @OneToMany(mappedBy="parent",cascade=CascadeType.ALL)
   private Set<Child> children;

   (...)
}

class Child {
   @ManyToOne
   private Parent parent;

   (...)
}
于 2011-08-04T11:01:48.233 回答
2

给定子表中的外键列称为“parent_id”,请尝试

@OneToMany(mappedBy="parent")
private Set<Child> children;

@ManyToOne
@JoinColumn(name="parent_id")
private Parent parent;
于 2011-08-04T11:02:14.163 回答