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.
Desde de já agradeço.
João Júnior
Curtir tópico
+ 0
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.
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
Clique aqui para fazer login e interagir na Comunidade :)