ID に埋め込まれたオブジェクトのフィールドを使用できる方法があるかどうかを判断しようとしています。
これは、私が持っているクラスの簡略化されたバージョンです。
@Embeddable
class Entry {
private String a;
private String b;
private String c;
private Entry() {...}
// getters and setters
// public static factory to generate instance of Entry
}
@Entity
@Table(name = "Entry_X")
class EntryX {
// I want EntryX to use fields 'a' and 'b' on Entry for its ID
@Embedded private Entry entry;
public EntryX() {...}
}
@Entity
@Table(name = "Entry_Y")
class EntryY {
// I want EntryY to use fields 'a', 'b', and 'c' on Entry for its ID
@Embedded private Entry entry;
public EntryY() {...}
}
「エントリ」クラスは外部プロセスの一部として生成されるため、変更できません。ジェネレーターへの変更要求は、実装されるまでに少なくとも 1 回の反復が必要になるため、現在持っているもので作業する必要があります。
編集:上記の小さな嘘をつきました。エントリにいくつかの小さな変更を加えることができます。ジェネレーターを使用して、クラスとそのメソッドに注釈を追加できます。Entry のフィールドやメンバーのアクセス タイプを変更するようなことはできません。
Entry のコンストラクターは現時点ではプライベートであるため、@MappedSuperclass および拡張アプローチを使用することはできません。
@Embeddable アプローチでほとんどそこにたどり着いたようですが、EntryX と EntryY の ID を適切に構築する方法が見つかりません。
どんな助けでも大歓迎です