4

次のORMの問題が発生しました。

私は2つのクラスAとBを持っており、どちらもクラスCのセットを持っています。

class A {
  @Id
  @GeneratedValue
  private long id;

  @OneToMany
  private Set<C> cSet;
}

class B {
  @Id
  @GeneratedValue
  private long id;

  @OneToMany
  private Set<C> cSet;
}

class C {
  @Id
  @GeneratedValue
  private long id;
}

私が持っていたアイデアの1つは、CにMappedSuperclassを使用し、それぞれがAまたはBのいずれかで参照される2つの拡張クラスを持つことでした。しかし、オブジェクト指向の観点からは、これは最適なアプローチではありません。彼らと一緒に。

このモデルを実現するためのより良い方法はありますか?

ありがとう、ベンジャミン

4

1 に答える 1

8

マッピングアノテーション(つまり、JoinColumnまたはJoinTable)を指定しない場合、関連付けごとに結合テーブルが使用されます。

したがって、次のテーブルが作成されます。

A : id
B : id
C : id
A_C : a_id, c_id (where c_id is unique)
B_C : a_id, c_id (where c_id is unique)

各セットにJoinColumnアノテーションを付ける場合の代替方法:

class A {
    @OneToMany
    @JoinColumn(name = "a_id")
    private Set<C> cSet;
}

class B {
   @OneToMany
   @JoinColumn(name = "b_id")
   private Set<C> cSet;
}

したがって、次のテーブルが作成されます。

A : id
B : id
C : id, a_id, b_id

もちろん、これはドキュメントで説明されています。

于 2012-12-18T18:27:07.043 に答える