sql >> Database >  >> RDS >> PostgreSQL

Generated Value in Postgres

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;


  1. Rijwaarden weergeven als kolommen in MySQL

  2. Unnes meerdere arrays parallel

  3. Het compatibiliteitsniveau van een database wijzigen met T-SQL

  4. Verbinding maken met MySQL vanaf Android met JDBC