Diferença entre @OneToMany e @ManyToOne

10 respostas
G

Olá galera…

Estou estudo o livro Enterprise JavaBeans 3.0 (o´reilly) do Bill Burke …

Alguem sabe a diferença entre unidirecional @OneToMany para @ManyToOne … acredito eu que seja a mesma, pois ao fazer o relacionamento onde “der” muitos a chave vem como estrangeira para esta table.

Ex.: @OneToMany -> um cliente tem muitos telefones … entao o id do cliente vai com fk pra tabela de telefones
@ManyToOne -> muitos cruzeiros tem um navio … entao o id do navio vai com fk pra tabela de cruzeiros

E ai … não é a mesma coisa ???

Obrigado

10 Respostas

F

Em @ManyToOne, se não me engano, será gerado uma tabela intermediária contendo as chaves primárias das tableas relacionadas, ou não?

A

Acredito que por ser uma relação bilateral, voce deve configurar dos dois lados.

S

gui_sv:
Olá galera…

Estou estudo o livro Enterprise JavaBeans 3.0 (o´reilly) do Bill Burke …

Alguem sabe a diferença entre unidirecional @OneToMany para @ManyToOne … acredito eu que seja a mesma, pois ao fazer o relacionamento onde “der” muitos a chave vem como estrangeira para esta table.

Ex.: @OneToMany -> um cliente tem muitos telefones … entao o id do cliente vai com fk pra tabela de telefones
@ManyToOne -> muitos cruzeiros tem um navio … entao o id do navio vai com fk pra tabela de cruzeiros

E ai … não é a mesma coisa ???

Se a FK fica em lugares diferentes obviamente não é a mesma coisa.
Poderiamos pensar que o mecanismo é o mesmo. Apenas na direção oposta. Realmente é isso.
Se é isso que vc se está referindo, então sim. Mas anotar com @OneToMany ou @ManyToOne não significa a mesma coisas e não produz o mesmo resultado.

G

quero dizer que a FK, sempre vai para o lado que der Many…ou seja … tanto faz o lado … eu to entendo que é isso

será eu to enchergando errado esse troço ???

G

isso não … pois mapeio apenas um lado !!!

G

acredito que não, pois … aqui no exemplo ficaram apenas duas tabelas !!! uma table cruzeiro (com o id_do_navio) e uma outra navio…

obrigado

A

Acho que ele quer sabre, porque isso.
Mas digamos que voê tem a situação do cliente ter muitos telefones e o telefone so pertencer a um cliente que você citou (embora acho que possa ser many-to-many, mas não vem ao caso) você precisa informar ao framework que que quem pertence a 1 e apenas um é o lado telefone e que o lado many da relação é clientes que pdoe ter varios telefones.

@many-to-one
cliente

@one-to-many
telfone

Foi isso que quis dizer…

F

acredito que não, pois … aqui no exemplo ficaram apenas duas tabelas !!! uma table cruzeiro (com o id_do_navio) e uma outra navio…

obrigado

É verdade, precisaria mapear @ManyToMany dos dois lados…

R

Afinal existe diferença ou não???

de @OneToMany e @ManyToOne?

D

rafaelshock:
Afinal existe diferença ou não???

de @OneToMany e @ManyToOne?


Um pai pode ter zero ou vários filhos. Cada filho sempre terá um único pai (biologicamente falando).
Dependendo de como você vê esta relação, você pode ter um 1 : N (one to many) ou N : 1 (many to one).
Na prática, todas as relações 1 : N/N : 1 colocam a chave estrangeira (FK) na tabela que representa o lado N da relação. No caso de pai e filho, a FK ficará em filho, independente de olharmos como one to many ou many to one.
Quando falamos nesta relação, considerando a perspectiva e documentação do hibernate, devemos lembrar que ela sugere o uso de uma tabela associativa. Na minha concepção, creio que esta seja desnecessária.
Seguindo o que o hibernate traz em sua documentação, teríamos:
pai 1 : N pai_filho
filho 1 : N pai_filho
Onde a tabela pai_filho representaria o relacionamento entre pais e filhos.
É possível entender essa iniciativa como uma forma de evitar a “intromissão” de uma FK, porém, ela é um elemento bem simples e, quando falamos em termos de objetos, um filho contém um atributo chamado pai, logo, não há por que separar esta relação.

Criado 20 de março de 2008
Ultima resposta 18 de set. de 2013
Respostas 10
Participantes 6