private accessor メソッドには Transient アノテーションを付ける必要がある

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 ガイドを参照してください。