sql >> Base de Datos >  >> RDS >> PostgreSQL

Valor generado en Postgres

Creo que la respuesta aceptada de Petar no es correcta o ya no es correcta. El incremento automático en Postgres se maneja a través de SERIAL pseudo tipo, eso es correcto. Sin embargo, el mapeo que proporciona Petar dará como resultado el siguiente DDL generado por Hibernate 5.1:

CREATE SEQUENCE users_id_seq START 1 INCREMENT 50;

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

Esto no es usar SERIAL , pero una secuencia gestionada por Hibernate. No es propiedad de la tabla y no se ha establecido ningún valor predeterminado. Por supuesto, la generación de DDL es una característica que muchas personas no usan en producción (pero muchas toman el código generado como plantilla).

Si escribe a mano su DDL y realmente usó SERIAL , luego usando GenerationType.SEQUENCE incluso puede entrar en conflicto con el comportamiento de la base de datos. La forma correcta de mapear Hibernate con la estrategia de identificación preferida de Postgres es usar GenerationType.IDENTITY . Por cierto, el código también es mucho más corto y más legible:

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