Les méthodes d'accès privées nécessitent une annotation Transient

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. Le correctif rapide de cette règle ajoute l'annotation javax.persistence.Transient à la méthode pour que l'application ait le même comportement dans EclipseLink et dans OpenJPA. Pour conserver l'attribut, n'exécutez pas le correctif rapide mais remplacez le modificateur de contrôle d'accès private par 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 ;
	} }

Après l'exécution du correctif rapide, l'annotation Transient est appliquée à la méthode d'accès private et l'importation est ajoutée.

Entités package ;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;

@Entity
classe publique PrivateAccessor { private int id ; zone private int ; @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 des informations sur ce problème et d'autres problèmes de migration d'OpenJPA vers EclipseLink, voir le guide OpenJPA to EclipseLink JPA Migration: Mappings.