In base alla specifica JPA 2.1, quando si utilizza l'accesso proprietà, i metodi di accesso delle proprietà devono essere pubblici o protetto. OpenJPA ignora qualsiasi metodo di accesso privato, mentre EclipseLink conserva tali attributi. Per ignorare i metodi di accesso privato in EclipseLink, i metodi devono avere un'annotazione Transient.
Questa regola contrassegna i metodi getter di accesso privato. La correzione rapida di questa regola aggiunge l'annotazione javax.persistence.Transient al metodo in modo tale che l'applicazione abbia lo stesso comportamento di OpenJPA in EclipseLink.
Per conservare l'attributo, non eseguire la correzione rapida, ma cambiare il modificatore di controllo accessi private in pubblic o protected.
Ad esempio, questa regola contrassegna il metodo getNonPersistentField nella seguente classe di entità:
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; } } |
Dopo l'esecuzione della correzione rapida, l'annotazione Transient viene applicata al metodo di accesso private, e viene aggiunta l'importazione.
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; } } |
Per informazioni su questo problema e altri problemi della migrazione da OpenJPA a EclipseLink, consultare la guida OpenJPA to EclipseLink JPA Migration: Mappings.