@GeneratorValue выдаёт уже занятые id

177
28 апреля 2018, 19:18

Таблица: "ID" INTEGER DEFAULT nextval('zakazchik_id_seq'::regclass) NOT NULL,
Сущность:

@Id
@Column(name = "\"ID\"", unique = true)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "\"zakazchik_seq_gen\"")
@SequenceGenerator(name = "\"zakazchik_seq_gen\"", sequenceName = "\"zakazchik_id_seq\"")
private Integer id;

При вставке новой строки пишет:

    ERROR SqlExceptionHelper:131 - ERROR: duplicate key value violates unique  
 constraint "zakazchik_new_new1_new_pk_zakaz"  
      Подробности: Key ("ID")=(730) already exists.

Всё правильно, 730 id уже занят... и так до 743. Через hibernate только сейчас начал работать, до этого всё было через jdbc с жутким собиратором sql-запросов.
Почему он начал назначать старые id начиная с 700-го, я же ему указал zakazchik_id_seq?

Answer 1

необходимо установить

@Column(name = "ID", unique = true, updatable = false, nullable = false)
@SequenceGenerator(name = "zakazchik_seq_gen", sequenceName = "zakazchik_id_seq", allocationSize=1)

По-умолчанию Hibernate использует алгоритм HiLo и резервирует 50 значений.

Вот описание на хабре

READ ALSO
Error executing Maven: Non-parseable settings

Error executing Maven: Non-parseable settings

При запуске любой процедуры Maven в IntelliJ IDEA (clean или build) Maven ругается на мой файл settingxml:

342
Как добавить в maven локальную зависимость?

Как добавить в maven локальную зависимость?

Главный pomxml-родитель justvillage:

212
Генерация QR-кода программно

Генерация QR-кода программно

Есть приложение с полями:

179
Как распарсить временную зону в DateTimeFormatter?

Как распарсить временную зону в DateTimeFormatter?

У меня есть String такого содержания:

217