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. O soluție automată pentru această regulă va adăuga javax.persistence.Transient la metodă, astfel încât aplicația are același comportament în EclipseLink ca și în OpenJPA. Pentru a păstra atributul, schimbați modificatorul de control al accesului privat în 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ă executarea remedierii automate, adnotarea Transient este aplicată la metoda de accesor privat, iar importul este adăugat.

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.