1
resposta

Porque relacionamento one-to-many?

Ola...

Porque depois de fazer a relação many-to-one foi feita a relação no caminho contrario com one-to-many? Qual a funcionalidade disso? É regra? É padrão? É uma "configuração" do Hibernate para funcionar?

Pergunto isso porque no meu ponto de vista faria sentido apenas apontar o many-to-one. Como por exemplo, em um cadastro de Endereço, quando preencher o campo UF, seria uma relaçao many-to-one, mas então eu teria que fazer a relação one-to-many da UF com o Endereço?

Obrigado

1 resposta

Oi Luan,

Não é obrigatório mapear o lado inverso da relação, que no exemplor seria o OneToMany.

Quando esse mapeamento dos dois lados é feito, o chamamos de relacionamento bidirecional.

Mas ele só é recomendado se houver uma necessidade para simplificar um código, pois pode levar a alguns problemas.

Aqui tem um post bacana falando sobre esses problemas: http://blog.triadworks.com.br/jpa-por-que-voce-deveria-evitar-relacionamento-bidirecional O post utiliza como exemplo o Hibernate do Java, mas a ideia é a mesma.

No exemplo que você citou, entre UF e Endreço, realmente o mais lógico é mapear de Endereço para UF, via relacionamento ManyToOne, pios afinal no banco de dados a tabela de endereços é que contem a FK para a tabela de UF.

Mas imagine que na aplicação você tenha um necessidade de exibir todos os endreços de uma determinada UF. Se na entidade UF tivesse mapeado o relacionamento OneToMany para os endereços, bastaria acessar a propriedade enderecos da entidade UF.

Se não houvesse o relacionamento OneToMany, seria necessario criar uma nova consulta para buscar os enderecos filtrando pela UF.

Ou seja, embora seja possível não precisar do mapeamento bidirecional, as vezes com ele algumas funcionalidades seriam mais simples de implementar.

Tudo depende da necessidade, mas no geral eu recomendo evitar os relacionamentos bidirecionais, devidos a eles não serem obrigatórios e também devido aos problemas que eles podem trazer.

Bons estudos!