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.