De acuerdo con la especificación JPA 2.1, cuando se utiliza el acceso de propiedad, los métodos de descriptor de acceso privados deben ser públicos o estar protegidos. OpenJPA ignora los métodos de descriptor de acceso privados, mientras que EclipseLink persiste estos atributos. Para ignorar métodos de descriptor de acceso privados en EclipseLink, los métodos deben tener una anotación transitoria.
Esta regla señala los métodos de obtención del descriptor de acceso privados. El arreglo rápido para esta regla añade la anotación javax.persistence.Transient al método de forma que la aplicación tiene el mismo comportamiento en EclipseLink que el que tiene con OpenJPA.
Para persistir el atributo, no ejecute el arreglo rápido y, en su lugar, cambie el modificador de control de acceso private a public o protected.
Por ejemplo, la regla señala el método getNonPersistentField() en las clase de entidad siguiente:
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; } } |
Tras ejecutar el arreglo rápido, la anotación Transient se aplica al método de descriptor de acceso private y se añade la importación.
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; } } |
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.