0

私はこのように見える3つのクラスを持っています。

@Entity
class A {

    @Id @GeneratedValue @TableGenerator
    private long id;
}

@MappedSuperclass
abstract class B extends A {
}

@Entity
class C extends B {
}

上記でも機能するはずですか?そして、少なくともEclipseLinkではうまくいかないようです。

Column 'ID' cannot be nullのインスタンスを永続化しようとしたときに取得しましたC

@MappedSuperclass を使用した抽象中間クラスの継承でサブクラスの作成に失敗するバグを見つけましたが、まったく同じ状況かどうかはわかりません。

@Jamesの回答ごとに更新

すみません、もっと詳しく書くべきです。はい、SINGLE_TABLE の継承を意図しています。Bnorの拡張プロパティはありませんC。それは単なる階層クラスの設計です。

@DiscriminatorColumn
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Entity
abstract class A {

    @Id @GeneratedValue @TableGenerator
    private long id;
}

@DiscriminatorValue("B") @Entity // I currently should do like this.
//@MappedSuperclass              // error
abstract class B<T extends SomeoneElse> extends A {
}

@DiscriminatorValue("C")
@Entity
class C extends B<James> {
}
4

1 に答える 1

1

JPAでは、 @MappedSuperclass はサブクラスではなくスーパークラスでなければならないと私は信じています(その名前が推測するように)。

@Entiy サブクラスを @MappedSuperclass として持つことが何を意味するのかわかりませんか?

あなたは何をしようとしているのですか?

@Entity 継承の場合、JPA は SINGLE_TABLE、JOINED、および TABLE_PER_CLASS の 3 つのオプションのみを提供します。すべての永続サブクラスはエンティティである必要があります。

JOINED 継承を使用し、B のテーブルを回避しようとしていると仮定します。JPA は、これを行う標準的な方法を指定していません。TopLinkでは、表を親(@Table(name="A"))と一致させることで、表を回避できます。

于 2013-03-04T15:56:18.663 に答える