Estou tentando inserir um novo registro no banco de dados. Para fazer isso, utilizo um DataProvider e vou setando os valores para os campos individualmente, assim:
O problema é que essa tabela possui uma coluna, chamada “codigo”, por exemplo, que é do tipo SERIAL, ou seja, autoincrement.
Quando mando executar esse exemplo acima, o registro é inserido com sucesso, porém a coluna “codigo” fica com valor 0. O autoincrement não funcionou, não incrementou o valor.
Preciso saber como faço para que isso ocorra, e quando efetuar um insert pelo DataProvider, a coluna autoincrement, funcione corretamente.
para campo serial você tem que fazer da seguinte forma:
@Id
@GeneratedValue(generator="sequencia_do_seu_id",strategy = GenerationType.SEQUENCE)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
colocando o @GeneratedValue resolve o seu problema
Quando tenho que inserir algum registro no banco, faço assim:
RowKey rk = cidadeDataProvider.appendRow();
cidadeDataProvider.setCursorRow(rk);
cidadeDataProvider.setValue("nome", this.nome);
cidadeDataProvider.setValue("uf", this.uf);
cidadeDataProvider.commitChanges();
cidadeDataProvider.refresh();
Só que dessa maneira, não consigo fazer com que o campo “codcidade” receba o próximo valor (já que é um campo serial, ou seja, auto-increment).
O que devo inserir na coluna “codcidade” para que receba o próximo valor do auto-increment?!
Para resolver esse problema (não sei se existe uma forma mais fácil… Mas deve existir… :D) a única maneira que encontrei foi executar um SELECT NEXTVAL na sequência do código, que era serial e daí pegar esse valor…
Mas já fiz os testes como o joede.fadel disse e funciona blza! Pena que eu não podia utilizar JPA no meu projeto…