Salvamento em Múltiplas Tabelas

03/07/2019

0

Pessoal, estou desenvolvendo um sistema (Java SE) há uma tela mestre detalhe onde por meio dela devo gravar os dados pessoais (tabela pessoa) e seus telefones (tabela telefone) - a pessoa pode ter vário contatos telefônicos, logo, tenho a tabela telefones. Eu preciso gravar isso tudo com um único pressionar do botão salvar. Eu havia feito chamadas isoladas [dao.Telefone.inserir(retornarTelefone()), dao.Cliente.inserir(retornarCliente()) e por fim dao.ContatoTelefonico.inserir(retornarContatoTelefonico())] dos dados no método que trata o evento do botão salvar, mas pode ocorrer erros e isso implica em dados gravados pela metade, como por exemplo, só o telefone se der erro na pessoa (cliente). Fazer um "dao tudo" é gambiarra. Como posso "amarrar" todas essas operações em uma única transação, mas mantendo cada a responsabilidade separa em cada dao?
Desde de já agradeço.
João Júnior

João Júnior

Responder

Posts

07/07/2019

João Júnior

Pessoal, estou desenvolvendo um sistema (Java SE) há uma tela mestre detalhe onde por meio dela devo gravar os dados pessoais (tabela pessoa) e seus telefones (tabela telefone) - a pessoa pode ter vário contatos telefônicos, logo, tenho a tabela telefones. Eu preciso gravar isso tudo com um único pressionar do botão salvar. Eu havia feito chamadas isoladas [dao.Telefone.inserir(retornarTelefone()), dao.Cliente.inserir(retornarCliente()) e por fim dao.ContatoTelefonico.inserir(retornarContatoTelefonico())] dos dados no método que trata o evento do botão salvar, mas pode ocorrer erros e isso implica em dados gravados pela metade, como por exemplo, só o telefone se der erro na pessoa (cliente). Fazer um "dao tudo" é gambiarra. Como posso "amarrar" todas essas operações em uma única transação, mas mantendo cada a responsabilidade separa em cada dao?
Desde de já agradeço.


Resolvi. Como eu estava invocando uma nova conexão com o BD, então como não havia um commit, o banco ficava bloqueado e dava problema de integridade de FK. Tive que trocar de try-with_resource para try-catch, já que o primeiro fecha automaticamente o recurso testado. Além disso tive que impedir que cada entidade do pacote DAO invocasse uma nova conexão do banco se houver uma conexão ativa.
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar