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