Zgodnie ze specyfikacją JPA 2.1, gdy używany jest dostęp do właściwości, metody korzystające właściwości muszą być publiczne lub chronione. Produkt OpenJPA ignoruje wszystkie prywatne metody korzystające, natomiast produkt EclipseLink utrwala te atrybuty. Aby zignorować prywatne metody korzystające w produkcie EclipseLink, metody te muszą mieć adnotację Transient.
Ta reguła powoduje oznaczenie flagą metod procedury pobierającej prywatnego
obiektu korzystającego. Szybka poprawka dla tej reguły dodaje adnotację
javax.persistence.Transient do metody, tak aby aplikacja miała
takie samo zachowanie w produkcie EclipseLink, jak w produkcie OpenJPA.
Aby
utrwalić ten atrybut, nie należy uruchamiać tej szybkiej poprawki i zamiast
tego zmienić modyfikator kontroli dostępu private na
public lub protected.
Na przykład reguła powoduje oznaczenie flagą metody
getNonPersistentField() w następującej klasie jednostki:
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 uruchomieniu szybkiej poprawki do metody korzystającej private
zostaje zastosowana adnotacja Transient i zostaje dodane słowo
kluczowe import.
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; } } |
Informacje na ten temat oraz na temat innych problemów z migracją interfejsu OpenJPA do interfejsu EclipseLink zawiera podręcznik Migracja interfejsu JPA ze środowiska OpenJPA do EclipseLink: Odwzorowania.