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