Для атрибутов с автоматически генерируемыми значениями требуется изменить конфигурацию

OpenJPA и EclipseLink создают разные таблицы для генерации значений атрибутов, имеющих аннотацию @GeneratedValue или @GeneratedValue(strategy=GenerationType.AUTO). Если в приложении есть сущности с атрибутами, сгенерированными OpenJPA, то при сохранении этих сущностей с помощью EclipseLink возникает ошибка, так как EclipseLink попытается сгенерировать значения, используя таблицу EclipseLink.

Для устранения этой неполадки необходимо настроить сущность так, чтобы для генерации значений атрибутов использовалась таблица последовательности OpenJPA. В этом случае EclipseLink будет использовать последнее значение из таблицы OpenJPA для генерации значения атрибута.

Данное правило находит атрибуты с аннотацией @GeneratedValue или @GeneratedValue(strategy=GenerationType.AUTO). Процедура быстрого исправления заменяет отмеченную аннотацию @GeneratedValue на следующие аннотации:

  @TableGenerator(name = "OPENJPA_SEQUENCE_TABLE", table = "OPENJPA_SEQUENCE_TABLE", pkColumnName = "ID", valueColumnName = "SEQUENCE_VALUE", pkColumnValue = "0")
  @GeneratedValue(strategy = GenerationType.TABLE, generator = "OPENJPA_SEQUENCE_TABLE")

Например, правило отметит аннотацию @GeneratedValue в следующем классе.

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class GeneratedValueEntity {

    @Id
    @GeneratedValue
    private int id;

}

Процедура быстрого исправления изменит аннотацию @GeneratedValue и добавит аннотацию @TableGenerator.

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity
public class GeneratedValueEntity {

    @Id
    @TableGenerator(name = "OPENJPA_SEQUENCE_TABLE", table = "OPENJPA_SEQUENCE_TABLE", pkColumnName = "ID", valueColumnName = "SEQUENCE_VALUE", pkColumnValue = "0")
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "OPENJPA_SEQUENCE_TABLE")
    private int id;
}

Для получения дополнительной информации об этой проблеме и других проблемах, возникающих при миграции OpenJPA в EclipseLink, обратитесь к руководству Миграция OpenJPA в EclipseLink JPA: преобразования.