1

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 を適切に構築する方法が見つかりません。

どんな助けでも大歓迎です

4

0 に答える 0