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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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?
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.
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.
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.