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: преобразования.