专用 accessor 方法必须具有 Transient 注释

根据 JPA 2.1 规范,在使用属性访问权时,属性 accessor 方法必须是公共的或被保护的。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 方法,并将添加导入。

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 指南。