Myślę, że przyjęta odpowiedź Petara jest nieprawidłowa lub już nie jest poprawna. Auto-inkrementacja w Postgresie jest obsługiwana przez SERIAL pseudo typ, to prawda. Jednak mapowanie, które podaje Petar, da w wyniku następujący kod DDL wygenerowany przez Hibernate 5.1:
CREATE SEQUENCE users_id_seq START 1 INCREMENT 50;
CREATE TABLE … (
id INT8 NOT NULL,
…
);
To nie używa SERIAL , ale sekwencja zarządzana przez Hibernate. Nie należy do tabeli i nie ustawiono wartości domyślnej. Oczywiście generowanie DDL to funkcja, której wiele osób nie używa w produkcji (ale wielu przyjmuje wygenerowany kod jako szablon).
Jeśli piszesz ręcznie swój DDL i faktycznie używasz SERIAL , a następnie za pomocą GenerationType.SEQUENCE może nawet kolidować z zachowaniem bazy danych. Prawidłowym sposobem mapowania Hibernate z preferowaną strategią identyfikacji Postgres jest użycie GenerationType.IDENTITY . Nawiasem mówiąc, kod jest również znacznie krótszy i bardziej czytelny:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;