Saya pikir jawaban yang diterima dari Petar tidak benar, atau tidak benar lagi. Peningkatan otomatis di Postgres ditangani melalui SERIAL
tipe pseudo, itu benar. Namun, pemetaan yang diberikan Petar akan menghasilkan DDL berikut yang dihasilkan oleh Hibernate 5.1:
CREATE SEQUENCE users_id_seq START 1 INCREMENT 50;
CREATE TABLE … (
id INT8 NOT NULL,
…
);
Ini tidak menggunakan SERIAL
, tetapi urutan terkelola Hibernate. Itu tidak dimiliki oleh tabel dan tidak ada nilai default yang ditetapkan. Tentu saja, pembuatan DDL adalah fitur yang tidak digunakan banyak orang dalam produksi (tetapi banyak yang menggunakan kode yang dihasilkan sebagai template).
Jika Anda menulis tangan DDL Anda dan benar-benar menggunakan SERIAL
, lalu gunakan GenerationType.SEQUENCE
bahkan mungkin bertentangan dengan perilaku database. Cara yang benar untuk memetakan Hibernate dengan strategi ID pilihan Postgres adalah menggunakan GenerationType.IDENTITY
. Kebetulan, kodenya juga jauh lebih pendek dan lebih mudah dibaca:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;