Penso che la risposta accettata da Petar non sia corretta, o non sia più corretta. L'autoincremento in Postgres è gestito tramite SERIAL
pseudo tipo, è corretto. Tuttavia, la mappatura fornita da Petar risulterà nel seguente DDL generato da Hibernate 5.1:
CREATE SEQUENCE users_id_seq START 1 INCREMENT 50;
CREATE TABLE … (
id INT8 NOT NULL,
…
);
Questo non sta usando SERIAL
, ma una sequenza gestita da Hibernate. Non è di proprietà della tabella e non è stato impostato alcun valore predefinito. Naturalmente, la generazione di DDL è una funzionalità che molte persone non utilizzano in produzione (ma molti prendono il codice generato come modello).
Se scrivi a mano il tuo DDL e usi effettivamente SERIAL
, quindi utilizzando GenerationType.SEQUENCE
può anche entrare in conflitto con il comportamento del database. Il modo corretto per mappare Hibernate con la strategia ID preferita di Postgres è usare GenerationType.IDENTITY
. Per inciso, il codice è anche molto più breve e leggibile:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;