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:

Pachet entities;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
clasă publică PrivateAccessor  {
	
	int privat id;
	int privat field;
	
	@Id
	int public getId() {
		return id;
	}

 	vid public setId(int id) {
		acest.id = id;
	}
	
	int privat getNonPersistentField() {
		retur nonPersistentField;
	}
	
	vid privat setNonPersistentField(int value) {
		acest.field = value;
	}

}

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

Pachet entities;

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

@Entity
clasă publică PrivateAccessor  {
	
	int privat id;
	int privat field;
	
	@Id
	int public getId() {
		return id;
	}

 	vid public setId(int id) {
		acest.id = id;
	}
	
	@Transient
	int privat getNonPersistentField() {
		retur nonPersistentField;
	}
	
	vid privat setNonPersistentField(int value) {
		acest.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.