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í.