Почему мой столбец автоинкремента H2 не возвращается после обновления до Hibernate5 - PullRequest
0 голосов
/ 12 июня 2018

Работает над обновлением 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.

...