已標註的 getter 方法必須有 setter 方法

當實體類別將註釋置於 getter 和 setter 方法來使用內容存取時,要持續保存的欄位必須同時定義 getter 方法和 setter 方法。 如果標註的 getter 方法未隨附 setter 方法,OpenJPA 會予以忽略;在這種狀況下,EclipseLink 則會擲出異常狀況。

此規則會標示內容存取欄位(其遺漏 setter 方法)的已標註 getter 方法。 請檢閱實體定義並加以修改,使其行為符合預期。 如果您要 JPA 提供者忽略此欄位,請移除 getter 方法的任何註釋。 如果您要持續保存此欄位,請新增 setter 方法。

在下列實體類別中,規則會標示 getVersion 方法。

package entities;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Transient;
import javax.persistence.Version;

@Entity
public class MissingSetter2  {
	
	private int id;
	private long time;
	
	public MissingSetter2 (int id) {
		this.id = id;
	}

	@Id
	public int getId() {
		return id;
	}


	public void setId(int id) {
		this.id = id;
	}
	
	// This getter is not annotated, so it is not flagged.
	public long getTime() {
		return time;
	}
	
	// This getter is flagged because it is annotated and there is no setter.
	@Version
	public double getVersion() {
		return 2.0;
	}
	
	public MissingSetter2() {
		time = 0;
	}
}

如需此問題以及其他 OpenJPA 至 EclipseLink 移轉問題的相關資訊,請參閱 OpenJPA 至 EclipseLink JPA 移轉:對映手冊。