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.