4

JPA複合主キーを使用すること可能であれば避けるべきもの、またはレガシーデータベースのために必要なものとして、または「毛深いコーナーケース。新しいデータベースをゼロから設計しており、考慮すべきレガシーの問題がないため、JPA ( HibernateまたはEclipseLinkのいずれか) を使用した複合主キーを回避することをお勧めします。

私自身の感覚では、JPAエンジンは十分に複雑であり、すべてのソフトウェアと同様に、バグがないわけではないため、複合主キーに関連するバグに対して実行する恐怖に耐えるよりも、正規化されていないテーブルに苦しむことが最善である可能性があります (理論的根拠数値の単一列の主キーと外部キーは、JPA エンジンがサポートする最も単純な使用例であるため、可能な限りバグがないようにする必要があります)。

4

1 に答える 1

7

私は両方の方法を試しましたが、個人的にはいくつかの理由から複合主キーを避けることを好みます。

  • id フィールドを含むスーパークラスを作成できるため、すべてのエンティティでそれを気にする必要はありません。
  • エンティティの作成がはるかに簡単になります
  • JPAは一般的により良いプレーをします
  • エンティティへの参照がより簡単になります。たとえば、一連の ID をセットに格納したり、Web ページのクエリ文字列で 1 つの ID を指定したりする作業は、単一の数値を使用するだけで済むため、大幅に簡素化されます。
  • すべてのエンティティに対して機能するスーパークラスで指定された単一の equals メソッドを使用できます)。
  • JSFを使用する場合は、汎用コンバーターを作成できます
  • DB クライアントで作業するときのオブジェクトの指定がより簡単に

しかし、それはいくつかの悪い部分ももたらします:

  • 少量の非正規化
  • 永続化されていないオブジェクト (自動生成された ID を使用する場合) を操作すると、場合によっては問題が発生する可能性があります。これは、等値メソッドなどを正しく機能させるために ID が必要になるためです。
于 2012-08-06T21:58:27.000 に答える