1

次の状況を考えると:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name="TOP_TABLE")
public class BaseClass implements Serializable {

    private Long id;

    @Id
    public Long getId() {

    }
}

// PrimaryKeyJoinColumns
@Entity
@Table(name="TABLE_A")
public class ClassA extends BaseClass {

    @Id
    public Long getId() {

    }
}

@Entity
@Table(name="TABLE_B")
// Primary Key Join Columns
public class ClassB extends BaseClass {

    @Id
    public Long getId() {

    }

}

2つの質問があります:

  • InheritanceType.JOINEDで、サブクラスは親のIDをオーバーライドできますか?それの訳は:

  • IDがシーケンスを介して生成される場合、各サブクラスのIDに個別のシーケンスジェネレーターを含めることができますか?

助けてくれてありがとう。

ジェイソン

4

1 に答える 1

1

id は階層内で 1 回しか定義できないため、サブクラスは id をオーバーライドできません。JPA 2.0仕様では、これは次のように伝えられています。

主キーは、エンティティ階層のルートであるエンティティ クラス、またはエンティティ階層内のすべてのエンティティ クラスの (直接的または間接的な) スーパークラスであるマップされたスーパークラスで定義する必要があります。主キーは、エンティティ階層で 1 回だけ定義する必要があります。

また、これに対する Hibernate 固有のサポートはありません。唯一のことは、継承階層のリーフで異なる方法で @Id を実行できるのは、PrimaryKeyJoinColumnを介して id 列に異なる名前を定義することです。

于 2012-05-18T18:33:25.257 に答える