PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Valore generato in Postgres

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;