OpenJPA создает отдельную таблицу для атрибутов коллекции, имеющих аннотацию
org.apache.openjpa.persistence.PersistentCollection. Для того
чтобы EclipseLink работал аналогичным образом, замените имеющиеся аннотации на аннотации
@ElementCollection и @Column в соответствии со спецификацией JPA. Если удалить аннотацию @PersistentCollection без добавления
аннотаций @ElementCollection и @Column, то
EclipseLink будет рассматривать поле как BLOB и попытается создать
столбец данных в таблице сущности.
Это правило находит аннотации org.apache.openjpa.persistence.PersistentCollection, чтобы их можно было преобразовать вручную.
Для преобразования аннотаций выполните следующие действия:
@org.apache.openjpa.persistence.PersistentCollection на
@javax.persistence.ElementCollection @javax.persistence.Column(name="element")Если у атрибута уже есть аннотация
@Column, не нужно добавлять еще одну аннотацию или изменять имя.
Ниже приведен пример аннотации @PersistentCollection в классе сущности, которую отметит это правило:
import javax.persistence.Entity; import javax.persistence.Id; import org.apache.openjpa.persistence.PersistentCollection; @Entity public class IntArrayEntity{ @Id private int id; @PersistentCollection private int[] arrayOfInts; } |
Для преобразования этой сущности замените аннотацию и измените массив int на список объектов Integer: List<Integer>.
import javax.persistence.Column; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class IntArrayEntity{ @Id private int id; @ElementCollection @Column(name = "element") private List<Integer> arrayOfInts; } |
Для получения дополнительной информации об этой проблеме, возникающей во время миграции OpenJPA в EclipseLink, обратитесь к руководству Миграция с OpenJPA на EclipseLink JPA: расширенные функции.