private 액세서 메소드에 임시 어노테이션이 있어야 함

JPA 2.1 스펙에 따르면 특성 액세스가 사용되는 경우 특성 액세서 메소드는 public 또는 protected여야 합니다. OpenJPA는 private 액세서 메소드를 무시하지만 EclipseLink는 해당 속성을 지속합니다. EclipseLink에서 private 액세서 메소드를 무시하려면 메소드에 임시 어노테이션이 있어야 합니다.

이 규칙은 private 액세서 Getter 메소드에 플래그를 지정합니다. 이 규칙의 빠른 수정사항은 EclipseLink와 OpenJPA의 애플리케이션 동작이 동일하도록 javax.persistence.Transient 어노테이션을 메소드에 추가합니다. 속성을 지속하려면 빠른 수정사항을 실행하지 말고 대신 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 어노테이션이 private 액세서 메소드에 적용되고 가져오기가 추가됩니다.

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로 마이그레이션: 맵핑 안내서를 참조하십시오.