ManyToMany Bidirecional no Hibernate

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

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

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

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/

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