Работает над обновлением Hibernate 3.6 до 5.2.Некоторые старые тесты перестали работать, один из них сравнивает max id в столбце автоинкремента до и после вставки (max (id) до должен быть max (id) +1 после).
Мы используем H2 какбаза данных в памяти, и мы не обновили H2.
Наша проблема заключается в том, что ранее, когда тест по какой-то причине откатывался, строка в базе данных была, конечно, удалена, но также был столбец автоинкремента.сбросить, поэтому, если вставка выполняется, но не удалась (например, из-за некоторых ограничений), сгенерированный идентификатор автоинкремента будет таким же в следующий раз.
После обновления до 5 это уже не так, и я не могупонять, почему.
Нам пришлось изменить столбец идентификатора с
@GeneratedValue(strategy = GenerationType.AUTO)
на
@GeneratedValue(
strategy = GenerationType.AUTO,
generator = "native")
@GenericGenerator(
name = "native",
strategy = "native")
(хорошее объяснение здесь )
Я попытался отладить Hibernate «IdentifierGeneratorHelper», и, похоже, он просто возвращает int, который появляется из H2 в результате вставки.Но H2 не изменился!
Было бы замечательно указателей.
Отказ от ответственности : я знаю, что вы не должны полагаться на значения int автоинкремента.Это старые тесты, и я просто пытаюсь убедиться, что понимаю все изменения, которые внес Hibernate5.