Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Relacionamento Bidirecional x Unidirecional

Gostaria de entender por que foi feito o relacionamento Bidirecional? Eu sempre criei relacionamento Unidirecional. E outra duvida é por que não foi preciso criar uma classe Entity para curso-aluno?

6 respostas

Olá, Thiago.

Se eu não entendi errado sua pergunta, creio que o motivo do relacionamento bidirecional é que tanto a entidade (tabela) Aluno quanto Curso se vinculam quando o Doctrine, por conta própria, cria a tabela de referência aluno-curso (ou curso-aluno) através das instruções contidas no mapeamento que fizemos em cada entidade (Aluno e Curso), com as annotations.

Aguardo confirmação de algum instrutor para validar minha resposta.

Fala Kleverson. Na verdade é o seguinte: quando trabalhei com hibernate eu criava a tabela de relação aluno_curso e criava a classe aluno_curso pra ser minha Entity. Ela tinha a referencia do Id do curso e do aluno. A classe Aluno (Entity) não tinha nada nela referenciando a classe e Curso (Entity) e nem o inverso. Ai quando para salvar um curso_aluno instanciava a classe e trabalhava com este objeto. Ex: getDAO().salvar(curso_aluno);

Então seja questão de diferentes formas de abstração entre os ORM. Com o hibernate (pesquisei aqui pra saber o que era! rsrs) você já criava a tabela-referência de antemão (é o caso? Não conheço o hybernate e este é meu primeiro curso de ORM) e com o Doctrine esta relação é exposta através das annotations, que gera a tabela-referência, demandando a relação bidirecional para tanto.

Você acha que é mais simples a forma que é aplicada no hybernate?

Não é questão de ser mais simples, ate por que as duas formas são simples. Na verdade a questão é entender se eu poderia fazer como fazia no hibernate e se nesse formato da aula é uma forma mais adequada no que se diz respeito à performace e boa pratica?

Entendi. Então eu também vou aguardar alguém responder adequadamente, à sua pergunta. De qualquer forma acho que essa parte da documentação do Doctrine possa lhe esclarecer algo. É sobre associações entre entidades e ele demonstra exemplos unidirecionais e bidirecionais.

solução!

Opa, Thiago. Pras 2 perguntas:

Gostaria de entender por que foi feito o relacionamento Bidirecional

Pra me permitir acessar o aluno através do curso e o curso através do aluno. Se eu precisasse de acesso através de apenas uma das 2, seria unidirecional.

https://www.doctrine-project.org/projects/doctrine-orm/en/2.8/reference/association-mapping.html#many-to-many-unidirectional

por que não foi preciso criar uma classe Entity para curso-aluno?

Porque isso não faria o menor sentido. curso_aluno ou aluno_curso é um detalhe de implementação do mecanismo de persistência. Isso não faz parte do domínio, logo, não deve estar modelado no meu código que é orientado a objetos. ;-)

Você pode configurar essa tabela com as anotações, ou como vamos fazer em cursos mais pra frente, em XML. Mas criar a entidade em si, foge completamente do paradigma de programação orienta a objetos.