A JPA 2.1 specifikáció szerint, tulajdonság hozzáférés használatakor a tulajdonság hozzáférő metódusainak nyilvánosnak (public) vagy védettnek (protected) kell lenniük. Az OpenJPA figyelmen kívül hagyja a privát hozzáférő metódusokat, míg az EclipseLink tárolja ezeket az attribútumokat. A privát hozzáférő metódusok figyelmen kívül hagyásához az EclipseLink megvalósításban, a metódusoknak rendelkezniük kell egy Transient annotációval.
Ez a szabály megjelöli a privát hozzáférő lekérdező metódusokat. A
szabályhoz tartozó gyorsjavítás hozzáadja a
javax.persistence.Transient annotációt a metódushoz,
hogy az alkalmazás ugyanúgy viselkedjen EclipseLink környezetben, mint
OpenJPA környezetben.
Az attribútum tárolásához ne futtassa a gyorsjavítást, hanem módosítsa a
private hozzáférés-felügyeleti módosítót public
vagy protected módosítóra.
Például a szabály megjelöli a getNonPersistentField()
metódust a következő egyedosztályban:
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; } } |
A gyorsjavítás futtatása után a Transient annotáció
alkalmazásra kerül a private hozzáférő metódusra, és
hozzáadásra kerül az importálás.
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; } } |
A problémával és más OpenJPA - EclipseLink átállítási problémákkal kapcsolatos információkért tekintse meg az OpenJPA - EclipseLink JPA átállítás: Leképezések útmutatót.