Hibernate Auto Increment ID

Eu tenho um aplicativo j2ee usando hibernate com anotação. Como faço para anotar o campo Id na minha class pojo para defini-lo como incremento automático ou gerado automaticamente. e ao adicionar o bean deixo esse campo no meu bean null?

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

e você deixa null ( 0 ) quando persistir. ( null se você usar os invólucros Integer / Long )

Em alguns casos, a estratégia AUTO é resolvida como SEQUENCE rathen do que como IDENTITY ou TABLE , portanto, você pode querer defini-la manualmente como IDENTITY ou TABLE (dependendo do database subjacente).

Parece SEQUENCE + especificando o nome da sequência trabalhada para você.

Faça o seguinte:

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

Você pode usar qualquer nome arbitrário em vez de kaugen. Funcionou bem, pude ver abaixo as consultas no console

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

O Hibernate define cinco tipos de estratégias de geração de identificadores:

AUTO – coluna, sequência ou tabela de identidade, dependendo do database subjacente

TABELA – tabela segurando o id

IDENTIDADE – coluna de identidade

SEQUÊNCIA – sequência

cópia de identidade – a identidade é copiada de outra entidade

Exemplo usando a tabela

 @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 mais detalhes, verifique o link .

Para sua informação

Usando o netbeans Novas Classes de Entidade do Banco de Dados com uma coluna mysql * auto_increment *, você cria um atributo com as seguintes annotations:

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

Isso estava me dando o mesmo erro dizendo que a coluna não deve ser nula, então eu simplesmente removi a anotação @NotNull deixando o atributo null, e funciona!

Se você tem uma coluna numérica que deseja incrementar automaticamente, pode ser uma opção para definir columnDefinition diretamente. Isso tem a vantagem de que o esquema gera automaticamente o valor mesmo se for usado sem hibernação. Isso pode tornar seu código específico do database embora:

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