Como é orientação a objetos, não é necessário criar uma nova classe para representar o manyToMany, isto será escencial no seu banco de dados porém na classe não.
Segue um pequeno exemplo de manyToMany, onde um usuário tem Varias ordens de serviço, e cada ordem de serviço tem vários usuários.
@Entity
public class OrdemServico {
private Long id;
private Set<Usuario> usuarios;
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
@ManyToMany
@JoinTable(name = "OrdemServico_Usuario", uniqueConstraints = { @UniqueConstraint(columnNames = {
"idOrdemServico", "idUsuario" }) }, joinColumns = @JoinColumn(name = "idOrdemServico", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "idUsuario", referencedColumnName = "id"))
public Set<Usuario> getUsuarios() {
return usuarios;
}
}
@Entity
public class Usuario {
private Long id;
private Set<OrdemServico> ordemServico;
@Id
@GeneratedValue
public Long getId() {
return id;
}
@ManyToMany(mappedBy="usuarios")
public Set<OrdemServico> getOrdemServico() {
return ordemServico;
}
}
SessionFactory sessionFactory;
//sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
sessionFactory = new Configuration().configure().buildSessionFactory();
Usuario usuario = new Usuario();
usuario.setLogin("userTeste25");
usuario.setNome("Usuário Teste");
Session session = sessionFactory.openSession();
Grupo grupo1 = (Grupo)session.load(Grupo.class, new Integer(1));
Grupo grupo2 = (Grupo)session.load(Grupo.class, new Integer(2));
Grupo grupo3 = (Grupo)session.load(Grupo.class, new Integer(3));
Transaction transaction = session.getTransaction();
transaction.begin();
usuario.getGrupos().add(grupo3);
usuario.getGrupos().add(grupo2);
grupo3.getUsuarios().add(usuario);
grupo2.getUsuarios().add(usuario);
session.save(usuario);
transaction.commit();
Eu não preciso mais da classe GrupoUsuario, pois ela é apenas uma classe de relacionamento mesmo, nada além das chaves estrangeiras que compõe a chave primária.
Desta forma está funcionando perfeitamente, ou seja, ao criar um usuário ele insere tb na tabela GRUPO_USUARIO (configurada no hbm.xml Usuario e Grupo);
O lance agora é conseguir fazer o mesmo com o Annotation
PS.: No Grupo tb tenho um relacionamento many-to-many com a PERMISSAO, porém não coloquei aqui. Além disso, “permissaos” não é o plural de “permissao”, ficou assim pois o Plugin que gerou automaticamente. Depois eu vou trocar