Melhor Cenário: Gravação em tabela de n para n Hibernate

1 resposta
javahibernate
W

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?

1 Resposta

J

Você pode usar a opção 3: deixe o hibernate cuidar disso.
A sua modelagem está um pouco mal feita, médico x especialidade não deve ter um id próprio, apenas os ids das tabelas que ela conecta.
Com isso feito, na entidade você pode colocar uma lista de especialidades como uma propriedade da classe médico, e o hibernate cuida de inserir o registro na tabela de ligação. Segue um link com exemplo:

Criado 25 de outubro de 2016
Ultima resposta 27 de out. de 2016
Respostas 1
Participantes 2