Implementacao de n-n no Diagrama de classes

3 respostas
ssousuke

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

3 Respostas

Thiago_Senna

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

ssousuke

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é +

Thiago_Senna

eu mesmo nunca implementei essa rotina que salvaria os dados na tabela AB utilizando jdbc. Ainda não vivenciei este desafio na prática. :frowning:

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! :slight_smile:

Criado 24 de agosto de 2006
Ultima resposta 25 de ago. de 2006
Respostas 3
Participantes 2