PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Valor gerado no Postgres


Acho que a resposta aceita do Petar não está correta ou não está mais correta. O auto-incremento no Postgres é tratado através de SERIAL pseudo tipo, isso é correto. No entanto, o mapeamento que o Petar fornece resultará no seguinte DDL gerado pelo Hibernate 5.1:
CREATE SEQUENCE users_id_seq START 1 INCREMENT 50;

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

Isso não está usando SERIAL , mas uma sequência gerenciada pelo Hibernate. Ele não pertence à tabela e nenhum valor padrão foi definido. Claro que a geração de DDL é um recurso que muitas pessoas não usam em produção (mas muitos tomam o código gerado como modelo).

Se você escrever manualmente seu DDL e realmente usou SERIAL , em seguida, usando GenerationType.SEQUENCE pode até entrar em conflito com o comportamento do banco de dados. A maneira correta de mapear o Hibernate com a estratégia de ID preferida do Postgres é usando GenerationType.IDENTITY . Aliás, o código também é muito mais curto e mais legível:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Long id;