JPA ドメイン モデルに問題があります。単純な継承を試してみようと思っています。そのために、単純な Person 基本クラスと Customer サブクラスを使用しています。公式ドキュメント (JPA と EclipseLink の両方) によると、基本クラスに必要なのは ID 属性/列だけです。しかし、テストを実行すると、Customer に @Id がないというエラーが常に表示されます。
最初は、id 属性が private だったため、問題は id 属性の可視性にあると考えました。しかし、それを protected に変更した後 (サブクラスが直接アクセスできるようにした後) でも、動作しません。
人:
@Entity @Table(name="Persons")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "TYPE")
public class Person {
@Id
@GeneratedValue
protected int id;
@Column(nullable = false)
protected String firstName;
@Column(nullable = false)
protected String lastName;
お客様:
@Entity @Table(name = "Customers")
@DiscriminatorValue("C")
public class Customer extends Person {
//no id needed here
検討すべきアイデアやリソースが不足しています。これはかなり単純な問題のはずですが、私にはわかりません。
ベストアンサー1
私はMappedSuperclassを作成して自分で解決しました
@MappedSuperclass
public abstract class EntityBase{
@Id
@GeneratedValue
private int id;
...setter/getter
}
すべてのエンティティはこのクラスから継承されます。チュートリアルでこれについて触れられていないのはなぜかまだ不思議ですが、JPA 2 実装では改善されるかもしれません。