Hibernate

Hibernate

Sequence

Если используешь sequence:

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "agreement_answer_seq")

то, надо помнить, что Hibernate внутри инкрементит каждый раз последовательность на 50 по умолчанию:

@SequenceGenerator(  
name = "agreements_package_seq",  
sequenceName = "agreements_package_seq",  
allocationSize = 50,  
)

Это сделано для оптимизации, чтобы не каждый раз ходить в базу за следующим числом:

SELECT nextval('public.user_id_seq'); -- Returns 1
SELECT nextval('public.user_id_seq'); -- Returns 2

А раз в 50 чисел, инкрементируя самостоятельно от 1 до 50, а дальше идя снова в базу:

SELECT nextval('public.user_id_seq'); -- Returns 1
-- Между этими двумя значениями Hibernate сам инкрементит числа
SELECT nextval('public.user_id_seq'); -- Returns 51

Так что, если создавать сиквенс руками, то надо это учитывать:

CREATE SEQUENCE IF NOT EXISTS agreement_answer_seq START 1 INCREMENT 50;