Métodos getter anotados devem ter um método setter

Quando uma classe de entidade usa o acesso propriedade ao colocar anotações nos métodos getter e setter, um método getter e um método setter devem ser definidos para um campo a ser persistido. Métodos getter anotados que não são acompanhadas por um método setter são ignorados pelo OpenJPA, enquanto que, nesta situação, o EclipseLink lança uma exceção.

Esta regra sinaliza métodos getter anotados para os campos de acesso de propriedade nos quais um método setter está ausente. Revise a definição de entidade e modifique-a para se comportar conforme pretendido. Se você desejar que o campo seja ignorado pelo provedor JPA, remova quaisquer anotações no método getter. Se você desejar que o campo seja persistido, inclua um método setter.

Na classe de entidade a seguir, o método getVersion é sinalizado pela regra.

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;
	}
	
	// Este getter é anotado, portanto, ele não é sinalizado.
	public long getTime() {
		return time;
	}
	
	// Este getter é sinalizado porque ele é anotado e não há nenhum setter.
	@Version
	public double getVersion() {
		return 2.0;
	}
	
	public MissingSetter2() {
		time = 0;
	}
}

Para obter informações sobre esse problema e outros problemas de migração do OpenJPA para o EclipseLink, consulte o guia Migração do OpenJPA para o EclipseLink JPA: mapeamentos.