sql >> Databasteknik >  >> RDS >> PostgreSQL

Generated Value i Postgres

Jag tror att det accepterade svaret från Petar inte är korrekt, eller inte längre korrekt. Den automatiska ökningen i Postgres hanteras genom SERIAL pseudotyp, det stämmer. Mappningen som Petar ger kommer dock att resultera i följande DDL genererad av Hibernate 5.1:

CREATE SEQUENCE users_id_seq START 1 INCREMENT 50;

CREATE TABLE … (
    id INT8 NOT NULL,
    …
);

Detta använder inte SERIAL , men en Hibernate-hanterad sekvens. Det ägs inte av tabellen och inget standardvärde har ställts in. Naturligtvis är DDL-generering en funktion som många inte använder i produktionen (men många tar den genererade koden som en mall).

Om du handskriver din DDL och faktiskt använde SERIAL och sedan använda GenerationType.SEQUENCE kan till och med komma i konflikt med databasens beteende. Det korrekta sättet att mappa Hibernate med Postgres föredragna ID-strategi är att använda GenerationType.IDENTITY . För övrigt är koden också mycket kortare och mer läsbar:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;


  1. Hur man mappar PostgreSQL enum med JPA och Hibernate

  2. Hur man lägger till ett alternativ till sql_mode i MySQL utan att förlora befintliga inställningar

  3. Använda Alias ​​In When-del av ett ärendeutlåtande i Oracle SQL

  4. Om pglogisk prestanda