Relacionamento Muitos para Muitos com Hibernate

Ola galera,

Estou com uma dúvida.

Tenho um relacionamento muitos para muitos com as classes Equipamento e Local.
Sei que o @ManyToMany deve ser evitado.
Nesses tipo de relacionamento lembro que o meu professor falava para criar uma outra classe tipo: EquipamentoLocal e usar a anotação nas demais apontando para ela.
Mas não lembro se era a anotação @OneToMany ou se era @ManyToOne.

Outra coisa que sempre quis saber é como mapear chave composta com hibernate?
Tipo queria que nessa tabela EquipamentoLocal a chave primária composta fosse a juncao da chave estrangeira de equipamento e a chave estrangeira de local.

Poderiam me ajudar?

A maneira mais simples é utilizando o @ManyToMany está pronto pra usar.

Se seu banco de dados for gerado pela JPA. Utilize a forma mais simples.

Na classe Local.

@ManyToMany
List<Equipamento> equipamentos;

Ou na classe Equipamento

@ManyToMany
List<Local> locais;

Se o banco já existir, utilize @JoinTable para mapear a tabela e as colunais que vc precisa.

E sim você pode criar uma classe para representar a tabela intermediaria, mas antes se pergunte se ela faz algum sentido no seu negócio. Por exemplo, é necessário mais informações além dos IDs do equipamento e local?

Nessa classe intermediaria, vc precisa mapear o Equipamento e o Local com @ManyToOne e no Local ou Equipamento um @OneToMany para a classe intermediária.

Outro ponto, você precisa mesmo de chave composta? Pergunto, porque é um saco trabalhar com chave composta no Hibernate.

Porque @ManyToMany deve ser evitado?