2

Genericsを使用してクラスMyCompositeKeyを作成します。

class MyCompositeKey<T> {
    T compositeId0;
    Integer compositeId1;
    Integer compositeId2;
}

したがって、同じ複合キーを持ち、タイプのみを変更する多くのテーブルで使用できます。

class Table1<Integer> {
    @EmbebedId
    MyCompositeKey<Integer> compositeId;
    //other attributes
}
class Table2<String> {
    @EmbebedId
    MyCompositeKey<String> compositeId;
    //other attributes
}
//...

問題は、クラスを使用する場合です。

class MyId {
    Integer id0;
    Integer id1;
}
class Table3<MyId> {
    @EmbebedId
    MyCompositeKey<MyId> compositeId;
    //other attributes
}

Hibernateは、テーブル3に存在しない列「compositeId0」を見つけようとします(私のテーブル3には複合キーid0、id1、compositeId1、compositeId2があります)。これどうやってするの?

PS:@EmbeddedIdを「MyCompositeKey.compositeId0」に入れると、クラスでは機能しますが、Integer、Long、Stringでは機能しません...Hibernateは列「value」を見つけようとするためです。

4

0 に答える 0