エンティティー・クラスが getter メソッドおよび setter メソッドにアノテーションを付けることでプロパティー・アクセスを使用している場合、フィールドを永続化するためには、getter メソッドと setter メソッドの両方を定義する必要があります。 アノテーションが付けられた getter メソッドに setter メソッドが付随していない場合、OpenJPA では無視されるのに対し、EclipseLink では例外がスローされます。
この規則により、プロパティー・アクセス・フィールドのアノテーションが付けられた getter メソッドのうち、setter メソッドが欠落しているものにフラグを立てます。 エンティティーの定義を確認し、意図した動作を行うように変更してください。 JPA プロバイダーがフィールドを無視するようにする場合は、getter メソッド上のアノテーションをすべて削除します。 フィールドを永続化させる場合は、setter メソッドを追加します。
以下のエンティティー・クラスでは、この規則により getVersion メソッドにフラグが立てられます。
package entities; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Transient; import javax.persistence.Version; @Entity public class MissingSetter2 { private int id; private long time; public MissingSetter2 (int id) { this.id = id; } @Id public int getId() { return id; } public void setId(int id) { this.id = id; } // この getter にはアノテーションは付いていないため、フラグは立てられません。 public long getTime() { return time; } // この getter にはアノテーションが付いており、setter がないため、フラグが立てられます。 @Version public double getVersion() { return 2.0; } public MissingSetter2() { time = 0; } } |
この問題や、OpenJPA から EclipseLink へのマイグレーションに関するその他の問題については、 OpenJPA to EclipseLink JPA Migration: Mappings ガイドを参照してください。