Eu tenho um aplicativo j2ee usando hibernação com anotação. Como faço para anotar o campo Id em minha classe pojo para defini-lo como incremento automático ou gerado automaticamente. e, ao adicionar o bean, deixo esse campo em meu bean nulo?
java
hibernate
auto-increment
cedric
fonte
fonte
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 as consultas abaixo no console
Hibernate: select max(proj_id) from javaproj Hibernate: insert into javaproj (AUTH_email, AUTH_firstName, AUTH_lastName, projname, proj_id) values (?, ?, ?, ?, ?)
fonte
Para sua informação
Usando netbeans novas classes de entidade do banco de dados com uma coluna mysql * auto_increment *, cria um atributo com as seguintes anotações:
@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 nulo, e funcionou!
fonte
O Hibernate define cinco tipos de estratégias de geração de identificadores:
AUTO - coluna de identidade, sequência ou tabela, dependendo do banco de dados subjacente
TABELA - tabela que contém o id
IDENTIDADE - coluna de identidade
SEQUENCE - sequência
cópia da identidade - a identidade é copiada de outra entidade
Exemplo usando 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 .
fonte
Se você tiver 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 hibernar. Isso pode tornar seu código específico do banco de dados:import javax.persistence.Column; @Column(columnDefinition = "serial") // postgresql
fonte
No caso de alguém "esbarrar" nesta questão do SO em busca de estratégias para a tabela Informix, quando PK for do tipo Serial .
Eu descobri que isso funciona ... como um exemplo.
@Id @GeneratedValue(strategy=GenerationType.IDENTITY) @Column(name = "special_serial_pk") private Integer special_serial_pk;
Para que isso funcione certifique-se de que ao fazer session.SaveOrUpdate você passa o valor para a coluna special_serial_pk NULL .
No meu caso eu faço um HTML POST com JSON assim ...
{ "special_serial_pk": null, //<-- Field to be incremented "specialcolumn1": 1, "specialcolumn2": "I love to code", "specialcolumn3": true }
fonte
Usando netbeans novas classes de entidade de banco de dados com um mysql coluna auto_increment , cria um atributo com o seguinte hibernate.hbm.xml: id is auto increment
fonte