根据 JPA 2.1 规范,在使用属性访问权时,属性 accessor 方法必须是公共的或被保护的。OpenJPA 忽略任何专用 accessor 方法,而 EclipseLink 持久存储这些属性。要忽略 EclipseLink 中的专用 accessor 方法,这些方法必须具有 Transient 注释。
该规则标记专用 accessor getter 方法。 该规则的自动修复将添加 javax.persistence.Transient 注释,使应用程序 在 EclipseLink 中的行为与在 OpenJPA 中的行为相同。
要持久化该属性,请将私有访问控制修饰符更改为 公共或受保护。
例如,该规则会标记以下实体类中的 getNonPersistentField() 方法:
package 实体; import javax.persistence.Entity; import javax.persistence.Id; @Entity 公用类 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; }}
自动修复运行后, Transient 注释将应用于私有访问器方法,并添加导入。
package 实体; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Transient; @Entity 公用类 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; }}
有关此问题和其他 OpenJPA 到 EclipseLink 迁移问题的信息,请参阅 OpenJPA to EclipseLink JPA Migration: Mappings 指南。