Если класс сущности обращается к свойствам путем размещения аннотаций в методах get и set, то для обеспечения постоянного хранения поля требуется наличие обоих методов get и set. Методы get с аннотациями, у которых нет парного метода set, игнорируются OpenJPA, в то время как EclipseLink генерирует исключительную ситуацию.
Это правило отмечает методы get с аннотациями, предназначенные для полей доступа к свойствам, у которых нет парного метода set. Необходимо проверить определение сущности и изменить его необходимым образом. Если поле должно игнорироваться провайдером JPA, удалите аннотации из метода get. Если поле должно постоянно храниться, добавьте метод set.
В следующем классе сущности правило отметит метод getVersion.
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; } // этот метод get не имеет аннотации, поэтому он не будет отмечен. public long getTime() { return time; } // этот метод get имеет аннотацию и не имеет парного метода set, поэтому он будет отмечен. @Version public double getVersion() { return 2.0; } public MissingSetter2() { time = 0; } } |
Для получения дополнительной информации об этой проблеме и других проблемах, возникающих при миграции OpenJPA в EclipseLink, обратитесь к руководству Миграция OpenJPA в EclipseLink JPA: преобразования.