Почему происходит сбой генерации идентификатора сущности Spring Boot? - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь автоматически генерировать идентификаторы для моей сущности, но она не генерируется. Вместо этого он начинается с 1, когда в моей БД уже существует запись с идентификатором «1». Почему он не генерирует идентификатор "9" для моей новой сущности?

enter image description here

1 Ответ

1 голос
/ 03 мая 2019

Обычно при создании таблицы с GenerationType.IDENTITY на postgres Hibernate настраивает столбец идентификатора плюс последовательность базы данных для управления этим идентификатором.

По договоренности имя последовательности будет " tablename _id_seq". Например, для таблицы ad_group_action будет соответствующая последовательность ad_group_action_id_seq. Вы можете подключиться к базе данных, чтобы дважды проверить фактическое имя созданной последовательности.

Последовательность начинается с 1 и увеличивается каждый раз, когда Hibernate вставляет строку.

Но если есть уже существующие строки - или если строки с существующими идентификаторами вставляются "вручную" в таблицу - эти строки могут конфликтовать с последовательностью.

Одним из решений является просто сброс последовательности (из pgAdmin или другого клиента базы данных), чтобы она начиналась с большего числа (скажем, 100), используя что-то вроде:

ALTER SEQUENCE ad_group_action_id_seq RESTART WITH 100;

Теперь Hibernate не будет конфликтовать с существующими строками (при условии, что их максимальный идентификатор <100). </p>

В качестве альтернативы, при вставке строк вручную, опустите столбец id и позвольте postgres автоматически установить их. Таким образом, таблица и последовательность всегда будут синхронизированы.

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