Metodele getter adnotate trebuie să aibă o metodă setter

Atunci când o clasă entitate utilizează accesul proprietate prin plasarea adnotărilor pe metode getter şi setter, ambele o metodă getter şi o metodă setter trebuie să fie definite pentru un câmp pentru a fi persistente. Metodele getter adnotate care nu sunt acompaniate printr-o metodă setter sunt ignorate de OpenJPA, în timp ce în această situaţie EclipseLink aruncă o excepţie.

Această regulă semnalează metodele getter adnotate pentru câmpurile de acces proprietate la care lipsesc o metodă setter. Examinaţi definiţia entităţii şi modificaţi-o să se comporte aşa cum aţi intenţionat. Dacă doriţi ca acest câmp să fie ignorat de către furnizorul JPA, înlăturaţi orice adnotări pe metoda getter. Dacă doriţi ca acest câmp să fie persistent, adăugaţi o metodă setter.

În următoarea clasă entitate, metoda getVersion este semnalată de regulă.

package entities;

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

@Entity
public class MissingSetter2  {
	
	private int id;
	private long time;
	
	public MissingSetter2 (int id) {
		this.id = id;
	}

	@Id
	public int getId() {
		return id;
	}


	public void setId(int id) {
		this.id = id;
	}
	
	// This getter is not annotated, so it is not flagged.
	public long getTime() {
		return time;
	}
	
	// This getter is flagged because it is annotated and there is no setter.
	@Version
	public double getVersion() {
		return 2.0;
	}
	
	public MissingSetter2() {
		time = 0;
	}
}

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