Lorsqu'une classe entité utilise un accès PROPERTY en plaçant des annotations sur des méthodes d'accès Get et Set, ces deux méthodes d'accès doivent être définies pour la persistance d'une zone. Les méthodes d'accès Get annotées qui ne sont pas accompagnées d'une méthode d'accès Set sont ignorées par OpenJPA, alors qu'EclipseLink génère une exception dans ce cas.
Cette règle marque les méthodes d'accès Get annotées pour les zones avec accès PROPERTY non dotées de méthode d'accès Set. Révisez la définition d'entité et modifiez-la pour obtenir le comportement attendu. Si vous souhaitez que la zone soit ignorée par le fournisseur JPA, retirez les annotations définies sur la méthode d'accès Get. Si vous souhaitez que la zone soit conservée, ajoutez une méthode d'accès Set.
Dans la classe entité suivante, la méthode getVersion est marquée par la règle.
package entities; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Transient; import javax.persistence.Version; @Entity public class MissingSetter2 { private int id; private long time; public MissingSetter2 (int id) { this.id = id; } @Id public int getId() { return id; } public void setId(int id) { this.id = id; } // Cette méthode d'accès Get n'est pas annotée et, par conséquent, elle n'est pas marquée. public long getTime() { return time; } // Cette méthode d'accès Get est marquée car il n'existe aucune méthode d'accès Set @Version public double getVersion() { return 2.0; } public MissingSetter2() { time = 0; } } |
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.