Metodele accesator private trebuie să aibă o adnotare Transient

Conform specificaţiei JPA 2.1, când accesul proprietăţii este folosit, metodele accesator ale proprietăţii trebuie să fie publice sau protejate. OpenJPA ignoră orice metode accesator private, în timp ce EclipseLink persistă aceste atribute. Pentru a ignora metodele accesator private în EclipseLink, metodele trebuie să aibă o adnotare Transient.

Această regulă semnalează metodele getter accesator privat. Corecţia rapidă pentru această regulă adaugă adnotarea javax.persistence.Transient la metodă astfel încât aplicaţia are acelaşi comportament în EclipseLink aşa cum o face cu OpenJPA. Pentru a persista atributul, nu rulaşi corecţia rapidă şi în schimb modificaţi modificatorul de control acces private public sau protected.

De exemplu, regula semnalează metoda getNonPersistentField() în următoarea clasă entitate:

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;
	}

}

După ce corecţia rapidă este rulată, este aplicată adnotarea Transient la metoda accesator private şi este adăugat importul.

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;
	}
}

Pentru informaţii despre această problemă şi alte probleme legate de migrarea OpenJPA la EclipseLink, vedeţi ghidul OpenJPA to EclipseLink JPA Migration: Mappings.