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

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

Aceitar