Заменить аннотацию OpenJPA @PersistentCollection на @ElementCollection и @Column

OpenJPA создает отдельную таблицу для атрибутов коллекции, имеющих аннотацию org.apache.openjpa.persistence.PersistentCollection. Для того чтобы EclipseLink работал аналогичным образом, замените имеющиеся аннотации на аннотации @ElementCollection и @Column в соответствии со спецификацией JPA. Если удалить аннотацию @PersistentCollection без добавления аннотаций @ElementCollection и @Column, то EclipseLink будет рассматривать поле как BLOB и попытается создать столбец данных в таблице сущности.

Это правило находит аннотации org.apache.openjpa.persistence.PersistentCollection, чтобы их можно было преобразовать вручную. Для преобразования аннотаций выполните следующие действия:

  1. Замените аннотацию @org.apache.openjpa.persistence.PersistentCollection на
    @javax.persistence.ElementCollection
    @javax.persistence.Column(name="element")
    
    Если у атрибута уже есть аннотация @Column, не нужно добавлять еще одну аннотацию или изменять имя.
  2. Измените массивы на коллекции объектов. Используйте примитивные типы оболочек вместо примитивных типов.

Ниже приведен пример аннотации @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: расширенные функции.