В соответствии со спецификацией JPA 2.1, методы доступа к свойствам должны иметь модификатор public или protected, если они используются. OpenJPA игнорирует любые частные (private) методы доступа, а EclipseLink сохраняет эти атрибуты. Для того чтобы частные методы доступа игнорировались в EclipseLink, к ним необходимо добавить аннотацию Transient.
Это правило отмечает частные методы доступа get. Предусмотренная для этого
правила процедура быстрого исправления добавляет аннотацию
javax.persistence.Transient в метод, чтобы приложение могло работать в EclipseLink так же, как в OpenJPA.
Для сохранения атрибута не применяйте быстрое исправление, а вручную измените модификатор private на public или protected.
Ниже приведен пример метода getNonPersistentField() в классе сущности, который отметит это правило:
package entities; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class PrivateAccessor { private int id; private int field; @Id public int getId() { return id; } public void setId(int id) { this.id = id; } private int getNonPersistentField() { return nonPersistentField; } private void setNonPersistentField(int value) { this.field = value; } } |
После применения быстрого исправления к методу доступа private применяется аннотация Transient и добавляется оператор импорта.
package entities; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Transient; @Entity public class PrivateAccessor { private int id; private int field; @Id public int getId() { return id; } public void setId(int id) { this.id = id; } @Transient private int getNonPersistentField() { return nonPersistentField; } private void setNonPersistentField(int value) { this.field = value; } } |
Для получения дополнительной информации об этой проблеме и других проблемах, возникающих при миграции OpenJPA в EclipseLink, обратитесь к руководству Миграция OpenJPA в EclipseLink JPA: преобразования.