根據 JPA 2.1 規格,使用內容存取時,內容 accessor 方法必須是 public 或 protected。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 註解會套用到私有存取方法,並加入匯入。 到私有存取方法,並新增匯入。
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 至 EclipseLink JPA 移轉:對映手冊。