Como posso salvar um objeto e pegar o id no mesmo formulário?

10 respostas
O

Boa noite pessoal.

Tenho um sistema de controle de livros feito com vraptor 3.5.

Neste sistema, o formulário para cadastrar livros.

Nome do livro, ISBN, NR de páginas …

Nesse formulário eu tenho um campo para localizar a editora.

Aí me vem a seguinte dúvida: não encontro a editora e queria apresentar um botão pra cadastrar a editora.

Mas como faço para após cadastrar a editora, ainda permanecer no formulário de cadastro de livros sem perder os dados já preenchidos e no campo buscar editora, encontrar a editora cadastrada?

Seria isso no mesmo formulário de cadastro de livros. Não sei se consegui ser claro na dúvida.

Aguardo orientações.

10 Respostas

igorventurelli

Você pode fazer isso perfeitamente.
Não tem qualquer problema.

Na ação do botão de cadastro de editoras, após concluir o cadastro, você deve buscar no banco o ultimo ID cadastrado na tabela de editoras.
A sintaxe varia conforme o banco… Exemplo em Oracle: select id from editora where rownum = 1 order by id desc
Alguma coisa assim.
Com o ID na mão você segue a vida.

E

O problema de pegar o ID dessa forma é q se mais pessoas estiverem cadastrando ao mesmo tempo vc corre o risco de pegar o ID errado.

O ideal é ver a solução nativa de cada banco, no postgres por exemplo, vc pode fazer o insert e passar “returning …” no final e escolher quais campos deseja retornar

igorventurelli

Pode ser também
Mas acredito que o cadastro seja feito dentro de uma transaction, então é só fazer o select dentro da mesma transaction… Antes de commitar.

igorventurelli

Não sabia que isso existia nativo :open_mouth:

O

Entendi.

Então não seria possível no mesmo formulário que estou cadastrando um livro, ao me deparar que não existe a editora, cadastrar a mesma e sem perder os dados já digitados do livro, pegar o id da editora cadastrada?

E se eu fizesse por Ajax? Exemplo:
Preenchi os dados do livro, no campo editora digito o nome dá editora, recebi msg de editora não cadastrada, aí clico no botão adicionar editora, faço o cadastro, o form da editora é fechado e ainda com o formulário do livro a ser cadastrado, digito o nome dá editora?
Será que é o correto?
Att

E

Ah sim, esqueci da transação haha nesse caso sim.
A vantagem do returning acaba sendo que não precisará fazer outro select xD

Se estiver no JPA ele já retorna o objeto com o ID preenchido até onde lembro.

E

O caminho é esse mesmo que vc citou …

igorventurelli

Yep

igorventurelli

Hahah
Massa!
Não sabia que tinha isso pronto.
Vou dar uma olhada :stuck_out_tongue_winking_eye:

I

Depende do banco de dados no , mysql vc usa
SELECT LAST_INSERT_ID();
Logo após o INSERT
Ele retorna o último auto incremente do insert que VOCÊ fez.
Já no sqlserver vc consegue recuperar ele no próprio INSERT.

Criado 21 de dezembro de 2016
Ultima resposta 21 de dez. de 2016
Respostas 10
Participantes 4