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

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.

1 curtida

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.

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

1 curtida

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.

Não sabia que isso existia nativo :open_mouth:

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

1 curtida

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.

1 curtida

O caminho é esse mesmo que vc citou …

Yep

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

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.