Cuando una clase de entidad utiliza el acceso de propiedad colocando anotaciones en métodos de obtención y establecimiento, se deben definir ambos métodos para persista un campo. OpenJPA ignora los métodos de obtención anotados que no están acompañados por un método de establecimiento, mientas que en esta situación, EclipseLink lanza una excepción.
Esta regla señala los métodos de obtención anotados para campos de acceso de propiedad en los que falta un método de establecimiento. Revise la definición de entidad y modifíquela para que se comporte como tiene previsto. Si desea que el proveedor JPA ignore el campo, elimine las anotaciones en el método de obtención. Si desea que el campo se persista, añada un método de establecimiento.
En la clase de entidad siguiente, el método getVersion se señala mediante la regla.
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; } // Este método de obtención no se anota, de forma que no se señala. public long getTime() { return time; } // Este método de obtención se señala porque está anotado y no hay ningún método de establecimiento. @Version public double getVersion() { return 2.0; } public MissingSetter2() { time = 0; } } |
Si desea más información sobre este problema y otros problemas de migración de OpenJPA a EclipseLink, consulte la guía Migración de OpenJPA a EclipseLink JPA: Correlaciones.