I metodi getter annotati devono avere un metodo setter

Quando una classe di entità utilizza l'accesso della proprietà inserendo delle annotazioni nei metodi getter e setter, perché un campo venga conservato è necessario definire sia un metodo getter che un metodo sette. I metodi getter annotati, non accompagnati da un metodo setter vengono ignorati da OpenJPA, mentre in questa situazione EclipseLink genera un'eccezione.

Questa regola contrassegna i metodi getter annotati per i campi di accesso delle proprietà che non contengono un metodo setter. Controllare la definizione dell'entità e modificarla in modo che si comporti come previsto. Se si desidera che il campo venga ignorato dal provider JPA, rimuovere tutte le annotazioni dal metodo getter. Se si desidera che il campo sia persistente, aggiungere un metodo setter.

Nella classe di entità seguente, il metodo getVersion viene contrassegnato dalla regola.

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;
	}
}

Per informazioni su questo problema e altri problemi della migrazione da OpenJPA a EclipseLink, consultare la guida OpenJPA to EclipseLink JPA Migration: Mappings.