已注释 getter 方法必须具有 setter 方法

当实体类通过替换 getter 或 setter 方法上的注释来使用属性访问权时,必须为要持久存储的字段定义 getter 方法和 setter 方法。OpenJPA 将忽略没有与 setter 方法一起提供的已注释 getter 方法,在这种情况下 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 to EclipseLink JPA Migration: Mappings 指南。