ManyToMany Bidirecional no Hibernate

4 respostas
D

Olá pessoal…

Seguinte… fiz um mapeamento bidirecional no hibernate…

Conforme o código abaixo:

Grupo.java

@ManyToMany(mappedBy = "grupos")
private Collection<Perfil> perfis;

Perfil.java

@ManyToMany
@JoinTable(
  name = "jm_ac_grupo_perfil",
  joinColumns = { @JoinColumn(name = "id_perfil") },
  inverseJoinColumns = { @JoinColumn(name = "id_grupo") }
)
private Collection<Grupo> grupos;

Ou seja… um perfil pode estar em vários grupos… e vice versa…

Só q…
Estou com um problema…

Os DAOs não salvam em ambos os lados… ou seja:

Quando eu chamo o perfilDAO.salvar(perfil), os grupos q estão no perfil são salvos no banco normalmente…
Porém quando chamo o grupoDAO.salvar(grupo), os perfis q estão no grupo não estão sendo salvos…

Se eu trocar a configuração anotada de lugar, ou seja… colocar o JoinTable no grupo e o mappedBy no perfil, o grupo passa a salvar normalmente, porem o perfil não funciona…

Pergunto… onde estou errando?
Oq preciso fazer…
Me ajudem por favor…

Valeus

4 Respostas

F

Tente normalizar mais sua modelagem criando uma classe(ou entidade) de relacionamento, e em seguida mapear um-para-muitos no hibernate.

D

Vc poderia exemplificar?
A modelagem é bem simples…

Um perfil, contém n grupos…
Um grupo, contém n perfis…

Independente da modelagem, existe vários casos assim…

Uma pessoa, dirige n carros…
Um carro, pode ser dirigido por n pessoas…

Como fazer para resolver um caso assim no hibernate?

Além disso, neste caso, estou criando o banco do zero, mas, para casos que já exista o modelo do banco criado, coisa q é normal acontecer, acho inviável remodelar o banco para atender as classes…

Não é possível mapear bidirecionalmente uma tabela N x N???

sergiolopes

Oi dac!

O problema é que o lado marcado com mappedBy (chamado por alguns de “lado fraco”) é sempre desconsiderado pelo Hibernate para atualizacao.

Voce pode ler mais sobre relacionamentos bidiecionais aqui:
http://blog.caelum.com.br/2007/03/28/como-nao-aprender-orientacao-a-objetos-relacionamento-bidirecional/

F

dac:
Vc poderia exemplificar?
A modelagem é bem simples…

Um perfil, contém n grupos…
Um grupo, contém n perfis…

Independente da modelagem, existe vários casos assim…

Uma pessoa, dirige n carros…
Um carro, pode ser dirigido por n pessoas…

Como fazer para resolver um caso assim no hibernate?

Além disso, neste caso, estou criando o banco do zero, mas, para casos que já exista o modelo do banco criado, coisa q é normal acontecer, acho inviável remodelar o banco para atender as classes…

Não é possível mapear bidirecionalmente uma tabela N x N???


Concordo que remodelar o BD para atender as classes seja inviável, porem em qualquer relacionamento muitos-para-muitos sempre existe uma entidade de relacionamento. Creio que se vc não criar essa entidade, sempre voltará ao mesmo problema.

Espero ter ajudado de alguma forma.

Criado 19 de janeiro de 2008
Ultima resposta 19 de jan. de 2008
Respostas 4
Participantes 3