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

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 в следующем классе.

импорт javax.persistence.Entity;
импорт javax.persistence.GeneratedValue;
импорт javax.persistence.Id;

@Entity
общедоступный класс GeneratedValueEntity {

    @Id
    @GeneratedValue
    частная id;

}

Автоматическое исправление изменит @GeneratedValue аннотацию и добавляет @TableGenerator аннотацию.

импорт javax.persistence.Entity;
импорт javax.persistence.GeneratedValue;
импорт javax.persistence.Id;

@Entity
общедоступный класс 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")
    частная id;
}

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