generationtype autoincrement java hibernate auto-increment

java - generationtype - jpa autoincrement id



Hibernate Auto Increment ID (5)

FYI

Usando netbeans Nuevas clases de entidad de la base de datos con una columna mysql * auto_increment *, crea un atributo con las siguientes anotaciones:

@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Basic(optional = false) @Column(name = "id") @NotNull private Integer id;

Esto me estaba dando el mismo error al decir que la columna no debe ser nula, así que simplemente eliminé la anotación @NotNull dejando el atributo nulo, ¡y funciona!

Tengo una aplicación j2ee que utiliza hibernación con anotación. ¿Cómo anoto el campo Id en mi clase pojo para configurarlo como auto incremento o auto generado? y al agregar el frijol dejo ese campo en mi bean null?


Hazlo de la siguiente manera:

@Id @GenericGenerator(name="kaugen" , strategy="increment") @GeneratedValue(generator="kaugen") @Column(name="proj_id") public Integer getId() { return id; }

Puede usar cualquier nombre arbitrario en lugar de kaugen. Funcionó bien, pude ver a continuación las consultas en la consola

Hibernate: select max(proj_id) from javaproj Hibernate: insert into javaproj (AUTH_email, AUTH_firstName, AUTH_lastName, projname, proj_id) values (?, ?, ?, ?, ?)


Hibernate define cinco tipos de estrategias de generación de identificadores:

AUTO : columna de identidad, secuencia o tabla según el DB subyacente

TABLE - tabla con el ID

IDENTIDAD - columna de identidad

SECUENCIA - secuencia

copia de identidad : la identidad se copia de otra entidad

Ejemplo usando la tabla

@Id @GeneratedValue(strategy=GenerationType.TABLE , generator="employee_generator") @TableGenerator(name="employee_generator", table="pk_table", pkColumnName="name", valueColumnName="value", allocationSize=100) @Column(name="employee_id") private Long employeeId;

para más detalles, verifique el link .


Si tiene una columna numérica que desea incrementar automáticamente, podría ser una opción para establecer columnDefinition directamente. Esto tiene la ventaja de que el esquema genera automáticamente el valor incluso si se utiliza sin hibernación. Esto podría hacer que tu código db-specific sin embargo:

import javax.persistence.Column; @Column(columnDefinition = "serial") // postgresql


@Id @GeneratedValue(strategy=GenerationType.AUTO) private int id;

y lo deja null ( 0 ) cuando persiste. ( null si usa los envoltorios Integer / Long )

En algunos casos, la estrategia AUTO se resuelve en SEQUENCE lugar de en IDENTITY o TABLE , por lo que es posible que desee establecerla manualmente en IDENTITY o TABLE (según la base de datos subyacente).

Parece SEQUENCE + especificando el nombre de secuencia trabajado para usted.