Selon la spécification JPA 2.1, lorsque l'accès PROPERTY est utilisé, les méthodes d'accès aux propriétés doivent être publiques ou protégées. OpenJPA ignore les méthodes d'accès privées, alors qu'EclipseLink conserve ces attributs. Pour ignorer les méthodes d'accès privées dans EclipseLink, les méthodes nécessitent une annotation Transient.
Cette règle marque les méthodes d'accès Get privées. Un correctif automatisé de cette règle ajoutera le javax.persistence.Transient à la méthode de sorte que l'application ait le même comportement dans EclipseLink que dans OpenJPA.
Pour conserver l'attribut, modifiez le modificateur de contrôle d'accès privé en public ou protected.
Par exemple, cette règle marque la méthode getNonPersistentField() dans la classe entité suivante :
Entités package ; import javax.persistence.Entity; import javax.persistence.Id; @Entity classe publique PrivateAccessor { private int id ; zone private int ; @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 ; } }
Une fois la correction automatisée exécutée, l’annotation Transient est appliquée à la méthode d’accès privée et l’importation est ajoutée.
les entités du paquet; 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; } }
Pour plus d'informations sur ce problème et sur d'autres problèmes de migration d'OpenJPA vers EclipseLink, reportez-vous au manuel OpenJPA to EclipseLink JPA Migration: Mappings.