專用 accessor 方法必須有 Transient 註釋

根據 JPA 2.1 規格,使用內容存取時,內容 accessor 方法必須是 public 或 protected。OpenJPA 會忽略任何專用的 accessor 方法,而 EclipseLink 則會持續保存這些屬性。如果要在 EclipseLink 中忽略專用的 accessor 方法,該方法必須有 Transient 註釋。

此規則會標示專用 accessor getter 方法。此規則的快速修正程式會將 javax.persistence.Transient 註釋新增至方法中,使得應用程式在 EclipseLink 中的行為與使用 OpenJPA 中一樣。 如果要持續保存屬性,請不要執行快速修正程式,而改為將 private 存取控制修飾元變更為 publicprotected

例如,此規則會標示下列實體類別中的 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 方法,並新增 import。

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 移轉:對映手冊。