Мисля, че приетият отговор от Петър не е правилен или вече не е правилен. Автоматичното увеличение в Postgres се обработва чрез SERIAL
псевдотип, това е правилно. Въпреки това, картографирането, което Петър дава, ще доведе до следния DDL, генериран от Hibernate 5.1:
CREATE SEQUENCE users_id_seq START 1 INCREMENT 50;
CREATE TABLE … (
id INT8 NOT NULL,
…
);
Това не използва SERIAL
, но управлявана от хибернация последователност. Не е собственост на таблицата и не е зададена стойност по подразбиране. Разбира се, генерирането на DDL е функция, която много хора не използват в производството (но много хора приемат генерирания код като шаблон).
Ако напишете своя DDL и действително използвате SERIAL
, след което с помощта на GenerationType.SEQUENCE
може дори да е в конфликт с поведението на базата данни. Правилният начин за съпоставяне на хибернация с предпочитаната ID стратегия на Postgres е използването на GenerationType.IDENTITY
. Между другото, кодът също е много по-кратък и по-четлив:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;