Diferença entre @OneToMany e @ManyToOne

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

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

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

[quote=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 ???

[/quote]

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.

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 ???

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

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

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…

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[/quote]

É verdade, precisaria mapear @ManyToMany dos dois lados…

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

de @OneToMany e @ManyToOne?

[quote=rafaelshock]Afinal existe diferença ou não???

de @OneToMany e @ManyToOne?[/quote]
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.