2

次の2つのエンティティがあるとします。

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

       (...)
}


class Child {
       @ManyToOne
       private Parent parent;

       (...)
}

データベースに2つのテーブルが欲しいのですが。1つは親用、もう1つは子供用です。ただし、Hibernateは3つのテーブルを作成します。1つは親用、1つは子用、もう1つはそれらを結合するためです(2つのフィールドを持つテーブル)。

@OneToOneChildクラスにparent属性を設定しても、同じ結果が得られます。

私は何が欠けていますか?

4

3 に答える 3

3

mappedByクラスのにプロパティを追加し@OneToManyますParent。これにより、Childが所有側になります。

子テーブルで外部キー列名を宣言するために、フィールドに注釈をChild追加します。@JoinColumnparent

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 に答える