В OpenJPA считается, что атрибуты, наследующие интерфейс
java.util.Collection<E>, по умолчанию не относятся к
сохраняемому типу, поэтому они не хранятся постоянно, если не имеют аннотации.
В EclipseLink по умолчанию применяется другой принцип работы: эти атрибуты сохраняются в базе данных.
Для того чтобы сохранить такой режим работы, как в OpenJPA, то есть
игнорировать атрибуты коллекции без аннотаций, добавьте аннотацию
javax.persistence.Transient к этим атрибутам в EclipseLink.
Это правило отмечает атрибуты без аннотаций JPA, наследующих интерфейс java.util.Collection<E>, включая следующие субинтерфейсы:
В следующем классе сущности правило отметит атрибуты collectionField и listField.
import java.util.Collection; import java.util.List; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class UnannotatedCollectionEntity { @Id private int id; private Collection collectionField; private List listField; } |
Процедура быстрого исправления добавит аннотации @Transient и оператор import.
import java.util.Collection; import java.util.List; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Transient; @Entity public class UnannotatedCollectionEntity { @Id private int id; @Transient private Collection collectionField; @Transient private List listField; } |
Для получения дополнительной информации об этой проблеме и других проблемах, возникающих при миграции OpenJPA в EclipseLink, обратитесь к руководству Миграция OpenJPA в EclipseLink JPA: преобразования.