Když třída entity používá přístup k vlastnostem pomocí umístění anotací na metody getter a setter, musí být pro pole, které má být zachováno, definována metoda getter a setter. Anotované metody getter, které nejsou provázeny metodou setter, jsou rozhraním OpenJPA ignorovány, zatímco v této situaci EclipseLink generuje výjimku.
Toto pravidlo značí anotované metody getter pro pole přístupu k vlastnostem, které postrádají metodu setter. Ověřte definici entity a upravte ji tak, aby se chovala podle očekávání. Pokud chcete, aby bylo pole ignorováno poskytovatelem JPA, odeberte všechny anotace v metodě getter. Chcete-li toto pole trvale uchovat, přidejte metodu setter.
V následující třídě entity je metoda getVersion označena pravidlem.
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; } // Tato metoda getter není anotována, takže nebude označena. public long getTime() { return time; } // Tato metoda getter je označena, protože je anotována a neexistuje metoda setter. @Version public double getVersion() { return 2.0; } public MissingSetter2() { time = 0; } } |
Informace o tomto problému a jiných problémech migrace OpenJPA na EclipseLink viz příručka Migrace OpenJPA na EclipseLink JPA: Mapování.