Hibernate извлекает из последовательности забавные фаллосы - PullRequest
0 голосов
/ 08 мая 2019

Мы определили сущность Hibernate, где идентификатор является числовым и автоматически назначается Hibernate на основе последовательности. По техническим причинам мы не позволяем нашей модели данных генерироваться в режиме гибернации, а вместо этого используем liquibase для инициирования последовательности.

Мы видели странное поведение, когда hibernate переназначает идентификаторы, уже присутствующие в таблице, а также присваивает отрицательные значения в качестве идентификаторов.

Что я могу сделать?

1 Ответ

0 голосов
/ 08 мая 2019

Hibernate (по крайней мере в 5.3.7) предполагает шаг 50 при использовании последовательностей. Это предположение не проверяется в базе данных. В основном hibernate выбирает следующее значение из последовательности и вычитает 50, затем присваивает эти значения (X-49, X-48, ...). Если ваша последовательность имеет шаг меньше 50, вы увидите, что идентификаторы назначаются несколько раз. Если ваш шаг больше 50, вы увидите неконтинентальные идентификаторы.

Когда вы инициализировали последовательность вручную, у вас, скорее всего, был шаг 1. Это означает, что вы увидите, что каждому идентификатору присваивается 50 раз, и, скорее всего, вы увидите много ошибок повторяющихся ключей.

Либо вы устанавливаете шаг в своей последовательности на 50, либо используете аннотацию @SequenceGenerator и атрибут allocationSize, чтобы соответствовать шагу вашей определенной последовательности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...