Soukromé metody přistupujícího objektu musí mít anotaci Transient

Podle specifikace JPA 2.1 musí být metody přistupujícího objektu vlastnosti, pokud je použit přístup k vlastnostem, veřejná nebo chráněná. Rozhraní OpenJPA ignoruje všechny soukromé metody přistupujícího objektu, zatímco EclipseLink tyto atributy uchovává. Chcete-li ignorovat soukromé metody přistupujícího objektu v EclipseLink, musí mít metody anotaci Transient.

Toto pravidlo značí soukromé metody getter přistupujícího objektu. Rychlá oprava pro toto pravidlo přidá do metody anotaci javax.persistence.Transient, aby aplikace měla stejné chování jako v EclipseLink, jak to dělá s rozhraním OpenJPA. Chcete-li tento atribut zachovat, nespouštějte rychlou opravu a místo toho změňte modifikátor řízení přístupu private na public nebo protected.

Pravidlo například značí metodu getNonPersistentField() v následující třídě entity:

package entities;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class PrivateAccessor  {
	
	private int id;
	private int field;
	
	@Id
	public int getId() {
		return id;
	}

 	public void setId(int id) {
		this.id = id;
	}
	
	private int getNonPersistentField() {
		return nonPersistentField;
	}
	
	private void setNonPersistentField(int value) {
		this.field = value;
	}

}

Po spuštění rychlé opravy je použita anotace Transient pro metodu přistupujícího objektu private a import je přidán.

package entities;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;

@Entity
public class PrivateAccessor  {
	
	private int id;
	private int field;
	
	@Id
	public int getId() {
		return id;
	}

 	public void setId(int id) {
		this.id = id;
	}
	
	@Transient
	private int getNonPersistentField() {
		return nonPersistentField;
	}
	
	private void setNonPersistentField(int value) {
		this.field = value;
	}
}

Informace o tomto problému a jiných problémech migrace OpenJPA na EclipseLink viz příručka Migrace OpenJPA na EclipseLink JPA: Mapování.