Ik denk dat het geaccepteerde antwoord van Petar niet of niet meer juist is. De automatische verhoging in Postgres wordt afgehandeld via SERIAL
pseudo-type, dat klopt. De mapping die Petar geeft zal echter resulteren in de volgende DDL gegenereerd door Hibernate 5.1:
CREATE SEQUENCE users_id_seq START 1 INCREMENT 50;
CREATE TABLE … (
id INT8 NOT NULL,
…
);
Dit maakt geen gebruik van SERIAL
, maar een Hibernate-beheerde reeks. Het is geen eigendom van de tabel en er is geen standaardwaarde ingesteld. DDL-generatie is natuurlijk een functie die veel mensen niet gebruiken in de productie (maar velen nemen de gegenereerde code als sjabloon).
Als u uw DDL met de hand schrijft en daadwerkelijk SERIAL
gebruikt, , en vervolgens GenerationType.SEQUENCE
. te gebruiken kan zelfs in strijd zijn met het databasegedrag. De juiste manier om Hibernate in kaart te brengen met de voorkeurs-ID-strategie van Postgres is het gebruik van GenerationType.IDENTITY
. Overigens is de code ook veel korter en beter leesbaar:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;