Wenn eine Entitätsklasse den Eigenschaftenzugriff mit Annotationen in Getter- und Setter-Methoden verwendet, müssen eine Getter- und eine Setter-Methode für ein Feld definiert werden, damit es persistent gespeichert wird. Annotierte Getter-Methoden, die keine entsprechende Setter-Methoden haben, werden von OpenJP ignoriert, wohingegen in EclipseLink in diesem Fall eine Ausnahme ausgelöst wird.
Diese Regel markiert annotierte Getter-Methoden für Eigenschaftenzugriffsfelder, die keine Setter-Methode haben. Überprüfen Sie die Entitätsdefinition und ändern Sie sie so, dass das gewünschte Verhalten erreicht wird. Wenn Sie möchten, dass das Feld vom JPA-Provider ignoriert wird, entfernen Sie alle Annotationen in der Getter-Methode. Wenn Sie möchten, dass das Feld persistent gespeichert wird, fügen Sie eine Setter-Methode hinzu.
In der folgenden Entitätsklasse wird die Methode getVersion von der Regel markiert.
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; } // Diese Getter-Methode ist nicht annotiert und wird deshalb nicht markiert. public long getTime() { return time; } // Diese Getter-Methode wird markiert, weil sie annotiert ist und keine Setter-Methode hat. @Version public double getVersion() { return 2.0; } public MissingSetter2() { time = 0; } } |
Informationen zu diesem Problem und zu weiteren Problemen bei der Migration von OpenJPA auf EclipseLink finden Sie in der Veröffentlichung OpenJPA to EclipseLink JPA Migration: Mappings.