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.