違いは、オブジェクトを使用して反映しようとしているデザインの違いです。
あなたのケースでは、はすべてCategories
に割り当てることができます。つまり、@*ToMany
という関係の記号です。今、あなたはどうかを判断する必要があります。
- がそれぞれ
Category
は一つだけQuestion
は(それが他のカテゴリーが同じ質問を参照することができないことを意味しユニーク制約になります)、それに割り当てることができ - この意志これは@ManyToMany
関係であろう - 各Category
がそれに割り当てられた複数Questions
を有することができる
@OneToMany
関係である(Category
テーブルに一意性制約は存在しません)。
@OneToMany(質問 - >カテゴリ)
この関係は、明示的@JoinTable
たりするとき、それは所有側で一方向の関係であるを使用してそう定義した場合にのみ、テーブルを結合で表すことができます'One'側です(つまり、エンティティにはCategories
のコレクションがありますが、Categories
にはQuestion
への参照がありません)。
これについて考えると、結合テーブルが使用されているのはかなり妥当と思われます。 DBMSがテーブルの1つの行とCategories
テーブルの複数の行との間の接続を保存する方法は他にありません。
ただし、双方向関係をモデル化する場合は、Category
( 'Many'側)が関係の所有側であることを指定する必要があります。この場合、Category
テーブルに外部キーを持つ結合列を作成することができます。Category
の各行は1つだけQuestion
と接続できるためです。
このようにして、結合テーブルはなく、単純な外部キーを持ちます(まだ、最初に指されているように、@JoinTable
を使用して結合テーブルを作成することができます)。この関係は、結合テーブルとして表現されなければならない
@ManyToMany。基本的には単方向の@OneToMany
の関係とよく似ていますが、この場合は、Categories
から複数の行で結合されたQuestion
の複数の行があります。
恐ろしい説明。より多くのupvotesを持っている必要があります。 – LppEdd