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;