トップレベルの親がプライマリキー(@Id)を定義する4つの継承レベルから継承するエンティティクラスがあります。エンティティクラスにプライマリキーが指定されていない
エンティティクラス[クラスD]に主キーが指定されていません。 @Id、@EmbeddedId、または@IdClassのいずれかを定義する必要があります。これらの注釈のいずれかを使用してPKを定義した場合は、エンティティクラス階層に混合型のアクセスタイプ(注釈付きのフィールドとプロパティの両方)がないことを確認してください。ここで
は階層です:A-> B-> C - >(エンティティ)D
これはその子に値を与え、私の非エンティティクラスです:
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
@MappedSuperclass
public class A implements Serializable {
@Id
@GeneratedValue
protected Long id;
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
protected Date deleted;
public Date getDeleted() {
return deleted;
}
public void setDeleted(Date deleted) {
this.deleted = deleted;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
これはその子のいずれかです。
@MappedSuperclass
public abstract class B extends A implements Serializable {
}
B->C
import javax.persistence.Entity;
import javax.persistence.Transient;
@MappedSuperclass
public class C extends B{
protected String name;
protected String description;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
そして最後にC->(エンティティ)D
@Entity
public class D extends C{
private String codeD;
public String getCodeD(){return codeD;}
public String setCodeD(String codeD) {this.codeD = codeD;}
}
通常、@MappedSuperclassを使用してシリアライズ可能なものを実装すれば、それはうまくいくはずです。私は階層のすべてのステップでもSerializableを実装しようとしましたが、同じエラーメッセージが表示されました。
私は現在Payara 4.1.1.1621を使用しています。いくつかのスレッドでこのような種類のエラーが発生しているように見えるかもしれませんが、すべてが奇妙な問題を解決しているかどうかはわかりません。
エンティティは問題ありません。あなたのJPAプロバイダは問題を抱えているようですが、どちらですか? –
投稿したマッピングはOKと思われます。実際、単純なアプリで再現しようとしましたが、Payara Server 162で動作します。ORM XMLマッピングファイルは使用していますか?問題を引き起こす可能性のある追加のマッピングが含まれている可能性はありますか? – OndrejM
JPAプロバイダがEclipseLinkで、javax.persistenceバージョンのEclipseLinkが2.1.0 ORM XMLマッピングファイルを使用していません。 –