| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2006 16:01:04
|
ssousuke
Thread.start()
Membro desde: 04/04/2006 11:33:53
Mensagens: 28
Offline
|
Oi pessoal, boa tarde
Como fica o diagrama de classes em um relacionamento n-n
Por exemplo:
a Classe *A* tem muitos objetos *B*
e a classe *B* tem muitos objetos *A*
Normalmente *A* teria uma colecao de objetos *B* e
*B* teria uma colecao de objetos *A*
mas para persistir os dados no banco eu devo criar uma Tabela *AB* que tem referencia para *A* e *B*.... então consequentemente
no diagrama de classes, terei que criar essa classe *AB* tb...
nesse caso aonde ficaria esse objeto *AB*
1 - ficará na classe *A* ou *B*
2 - ficará na classe *A* e *B*
3 - ficará perdido?
Dizem que o diagrama de classes deve ser uma abstração do mundo real.... mas se eu criar essa classe *AB* eu não estarei seguindo essa prática.....
Como eu devo fazer nesse caso?
obrigado
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2006 16:36:45
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
No seu modelo de classes você não deve mesmo criar uma classe chamada AB. Crie apenas uma classe chamada A, e outra chamada B.
O relacionamento entre elas pode ser feito utilizando um collections mesmo, onde A possui uma lista de B, e B possui uma lista de A.
Já na base de dados, vc deve criar uma tabela AB mesmo, mas isso não quer dizer que você precisa de uma classe AB. A classe responsável por persistir A e B deverá ser esperto o suficiente para pegar os dados de A e B e persistir nas tabelas A, B e AB. Depois é só acrescentar os ovos, a farinha e mexer, até pegar consistência...
Abraços
Thiago
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2006 13:36:59
|
ssousuke
Thread.start()
Membro desde: 04/04/2006 11:33:53
Mensagens: 28
Offline
|
Oi thiago... obrigado pela resposta já me esclareu a duvida....
mas agora estou com outra duvida... como essa classe "esperta" agiria ao gravar o objeto *A* por exemplo.
Como no modelo de classes nao vai existir um obj *AB* esta classe "esperta" teria que ficar comparando no banco o id do obj *A* e o id do objeto *B* pra ver se o relacionamento ainda não foi persistido (evitando gravar o relacionamento na tabela -AB- duas vezes)....?? e isso para todas as vezes que eu quiser gravar o obj *A* ou o obj *B*..... ??
Obs: Fiquei sabendo tb que o hibernate já faz isso pra vc... é só vc mapear as classes corretamente.
Obrigado pela atenção,
até +
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/08/2006 14:06:03
|
Thiago Senna
GUJ Master
![[Avatar]](/images/avatar/78719f11fa2df9917de3110133506521.jpg)
Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline
|
eu mesmo nunca implementei essa rotina que salvaria os dados na tabela AB utilizando jdbc. Ainda não vivenciei este desafio na prática.
Acho que isso depende muito de como está sendo realizada a sua lógica de negócio.
Eu estou imaginando o seguinte: (não sei se é correto).
Vc poderia persistir A apenas na tabela A, e quando persistir B, tu persiste na tabela B e atualiza a tabela AB. Acho que assim fica dificil de duplicar os registros na tabela AB, afinal, ou vc inclui B, ou vc altera B. Se vc estiver incluindo um novo B, crie um novo registro na tabela AB, e caso esteja alterando, altere a tabela AB.
viche, esse monte de A, B e AB nos posts está uma beleza!
|
|
|
 |
|
|