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