Я пытаюсь перенести приложение на новую версию всех фреймворков. Но при переносе Hibernate с версии 4.1.2 на версию 5.2.17 я столкнулся с некоторым странным поведением (я также использую Oracle 12).
Определение идентификатора следующее:
@Id
@SequenceGenerator(name = "LOCATION_ID_GENERATOR", sequenceName = "SEQ_LOCATION")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "LOCATION_ID_GENERATOR")
@Column(unique = true, nullable = false, precision = EntityColumnDefinitions.PRECISION_19)
private Long id;
Я видел, что в этом коде используется не предоставленная последовательность, а какой-то сгенерированный Hibernate идентификатор последовательности. По этой причине последовательность в базе данных не синхронизирована с идентификатором.
Я мог бы исправить это, добавив «allocSize = 1, initialValue = 1» к определению идентификатора и создав PL-SQL-скрипт для обновления последовательности и синхронизации с идентификатором.
@Id
@SequenceGenerator(name = "LOCATION_ID_GENERATOR", sequenceName = "SEQ_LOCATION", allocationSize = 1, initialValue= 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "LOCATION_ID_GENERATOR")
@Column(unique = true, nullable = false, precision = EntityColumnDefinitions.PRECISION_19)
private Long id;
Мой вопрос - возможно ли использовать тот же механизм, что и в версии 4.1.2? Я имею в виду, что представляет собой аннотация идентификатора для использования идентичного идентификатора последовательности, сгенерированного Hibernate, на основе последнего идентификатора в базе данных?