私には最大10のクラスがあり、それぞれに2〜4つの値で構成される複合キーがあります。クラスの1つはメインクラス(「センター」と呼びましょう)であり、1対1または1対多として他のクラスに関連しています。
JPAでこれを記述する正しい方法を考えると、@ Embedded/@PrimaryKeyアノテーションを使用してすべての主キーを記述する必要があると思います。
質問1: 私の懸念は-データベースレベルで、「センター」PKの列の数に等しい「センター」を参照する各テーブルの追加の列の数があることを意味しますか?
はいの場合、参照に人工の一意キーを使用することでそれを回避することは可能ですか?この場合、実際のPKと人工的なPKをどのように記述する必要があるかを教えてください。
注: PKとして一意のIDを使用するだけでなく、実際のPKを保持したい理由は、アプリケーションに外部データソースからのデータ読み込み機能があり、ローカルデータベースに既にあるレコードを返す場合があります。一意のIDがPKとして使用される場合、新しいレコードの場合、ダウンロードしたばかりの一意のIDは使用できないため、データの更新はできません。同時に、これはアプリケーションの通常のシナリオであり、新しいレコードの挿入を更新する必要があるのは、実際の複合主キーが一致するかどうかによって異なります。
質問2:10 のクラスすべてに、それぞれが拡張する抽象クラスで説明した共通のフィールド「日付」があります。「日付」自体がキーになることはありませんが、常に各クラスの複合キーの一部です。複合キーはクラスごとに異なります。このフィールドをPKの一部として使用できるようにするには、各クラスでこのフィールドを説明する必要がありますか、それともそのまま使用する方法はありますか?@Embeddedアノテーションと@PrimaryKeyアノテーションを試してみたところ、eclipselinkが抽象クラスに記述されたフィールドを見つけることができないというエラーが常に発生しました。
前もって感謝します!
PS。最新バージョンのeclipselink&H2データベースを使用しています。