Possuo algumas dúvidas quanto a gravação de registros em tabelas de N para M.
Meu cenário é o seguinte:
No meu banco ao inserir um médico insiro na tabela “Médico” o cadastro de Médico,
e em “Médico x Especialidade” as especialidades deste médico.
Alteração de registro:
Solução 1 - Em um cenário normal, eu daria update na tabela “Medico” e após isso eu escolheria a exclusão de todos os registros de “Médico x Especialidade” e em seguida faria o insert de toda a lista de “Médico x Especialidade”.
Como estou aplicando o Hibernate no projeto e tive pouco contato com ele, pedi ajuda para um colega de trabalho.
O mesmo disse que esta minha “solução” estaria muito errada. Pois iterar sobre cada item teria um custo menor do que iterar sobre trabalhar com a lista inteira. A solução dele seria a seguinte:
Solução 2 - Preencho uma lista auxiliar com minhas especialidades já cadastradas no banco de dados (normalmente isso é feito na pesquisa do registro, então isso eu já faço de todo jeito). Na alteração eu percorreria TODA a lista e verificaria cada item. Se o item foi excluído, eu iria fazer a exclusão no banco de dados. Se o item foi inserido, eu iria faze o insert no banco de dados, se o item permanece na tela, eu não executaria nada.
Observação sobre a Solução 1: Ao meu ver (que pode estar equivocado) a solução 1 seria a ideal, pois eu realizaria todos os passos em uma unica conexão e para uma lista muito grande economizaria muito tempo e memória.
Observação sobre a Solução 2: O colega que me aconselhou disse que eu utilizaria muito recurso da memória utilizando uma conexão para trabalhar com toda a lista (???) porém tenho muitas dúvidas. O pró é para lista pequena, mas mesmo assim vejo muitas idas e voltas no banco de dados e ao meu ver isso é ruim. Como estou trabalhando com Hibernate e tenho pouco conhecimento, estou com bastante duvidas sobre o que usar.
O que já tinha pensado era caso haja alteração na lista, eu faria a exclusão e inseriria novamente os registros.
Neste cenário qual seria a melhor prática?
