De acordo com a especificação JPA 2.1, quando o acesso à propriedade é usado, os métodos do acessador da propriedade devem ser públicos ou protegidos. O OpenJPA ignora qualquer método do acessador privados, enquanto o EclipseLink persiste tais atributos. Para ignorar os métodos do acessador privado no EclipseLink, os métodos devem ter uma anotação Transiente.
Esta regra sinaliza métodos getter do acessador privado. A correção rápida para esta regra
inclui a anotação javax.persistence.Transient no método, de forma que o aplicativo tenha o mesmo comportamento no EclipseLink que ele tem com o OpenJPA.
Para persistir o atributo, não execute a correção rápida e, em vez disso, altere o modificador do
controle de acesso private para public ou protected.
Por exemplo, a regra sinaliza o método getNonPersistentField() na classe
de entidade a seguir:
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; } } |
Após a correção rápida ser executada, a anotação Transient é aplicada no
método do acessador private e a importação é incluída.
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; } } |
Para obter informações sobre esse problema e outros problemas de migração do OpenJPA para o EclipseLink, consulte o guia Migração do OpenJPA para o EclipseLink JPA: mapeamentos.