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. Automatizovaná oprava tohoto pravidla přidá do pole javax.persistence.Transient anotaci k metodě tak, aby aplikace se na adrese EclipseLink chovala stejně jako na adrese OpenJPA.
Chcete-li atribut zachovat, změňte modifikátor řízení přístupu private na hodnotu public nebo protected.
Pravidlo například značí metodu getNonPersistentField() v následující třídě entity:
entity balíku ; import javax.persistence.Entity; import javax.persistence.Id; @Entity veřejná třída PrivateAccessor { private int id; private int pole; @Id public int getId() { return id; } public void setId(int id) { this.id = id; } private int getNonPersistentField() { vrací hodnotu nonPersistentField; } soukromá neobsazená setNonPersistentField(int hodnota) { this.field = hodnota; }}}
Po spuštění automatické opravy se použije anotace Přechodný stav na metodu private accessor a přidá se import.
entity balíku ; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Transient; @Entity veřejná třída PrivateAccessor { private int id; private int pole; @Id public int getId() { return id; } public void setId(int id) { this.id = id; } @Transient private int getNonPersistentField() { vrátit nonPersistentField; } soukromá neobsazená setNonPersistentField(int hodnota) { this.field = hodnota; }}}
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í.