JPA 2.1 仕様により、プロパティー・アクセスが使用されている場合、プロパティーの accessor メソッドは public または protected である必要があります。OpenJPA は private accessor メソッドがある場合は無視するのに対し、EclipseLink はそれらの属性を永続化します。EclipseLink で private accessor メソッドを無視するには、このメソッドは Transient アノテーションを持つ必要があります。
この規則により、private accessor getter メソッドにフラグを立てます。 このルールの自動修正には javax.persistence.Transient アノテーションをメソッドに追加します。 EclipseLink が OpenJPA と同じ動作をするようにします。
属性を永続化するには、 private アクセス制御修飾子を public または protected に変更します。
例えば、この規則は以下のエンティティー・クラスの getNonPersistentField() メソッドにフラグを立てます。
package エンティティー import javax.persistence.Entity; import javax.persistence.Id; @Entity 公開クラス PrivateAccessor { private int id; private int フィールド; @Id public int getId() { return id; } 公開 void setId(int id) { this.id = id; } private int getNonPersistentField() { return nonPersistentField; } private void setNonPersistentField(int 値) { this.field = value; }} (})
自動修正が実行されると、 プライベートアクセサー メソッドに Transient アノテーションが適用され、インポートが追加されます。
package エンティティー import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Transient; @Entity 公開クラス PrivateAccessor { private int id; private int フィールド; @Id public int getId() { return id; } 公開 void setId(int id) { this.id = id; } @Transient private int getNonPersistentField() { return nonPersistentField; } private void setNonPersistentField(int 値) { this.field = value; }} (})
この問題や、OpenJPA から EclipseLink へのマイグレーションに関するその他の問題については、 OpenJPA to EclipseLink JPA Migration: Mappings ガイドを参照してください。