[RESOLVIDO]Relacionamento N X N com JSF e Hibernate

Sou novo na linguagem JAVA (apenas alguns meses) e fiz os cursos FJ21, 25 e 26 na Caelum… Agora estou fazendo um projeto utilizando Primefaces, JSF2, Hibernate com MySql… Fiz um modelo onde criei as classes Usuario, Grupo e GrupoUsuario. Com o Hibernate fiz a classe de Usuario com relacionamento 1 X N com GrupoUsuario e essa com N X 1 com Grupo… Fiz os respectivos DAOs e ManagedBeans com as telas que realizam os CRUDs… Agora estou querendo criar uma tela para poder relacionar e listar os grupos e seus respectivos usuarios, mas não sei bem como realizar…
Como eu consigo, por exemplo, carregar um DataTable com o Nome do Grupo, Nome do Usuario, Login e EMail do Usuario??? Como criar a lista com atributos de diferentes classes ? Como devo construir o DAO e o Bean para um tela onde eu consiga associar e desassociar grupos e usuários.???

grande ajuda… tks…

Bom dia acesar, tudo bem?

poderia postar suas entities para verificarmos os relacionamentos?

Oi Fábio,
seguem as entities…

@Entity
public class Grupo implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue
private Long id;

@Column(nullable=false,unique=true)
@NotEmpty
private String nome;

@Column(nullable=false)
private String descricao;

@OneToMany(mappedBy="grupo")
private List<GrupoUsuario> grupoUsuarios;

public Long getId() {
	return id;
}

public void setId(Long id) {
	this.id = id;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public List<GrupoUsuario> getGrupoUsuarios() {
	return grupoUsuarios;
}

public void setGrupoUsuarios(List<GrupoUsuario> grupoUsuarios) {
	this.grupoUsuarios = grupoUsuarios;
}

public String getDescricao() {
	return descricao;
}

public void setDescricao(String descricao) {
	this.descricao = descricao;
}

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

@Entity
public class Usuario implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue
private Long Id;

@Column(nullable=false, length=500)
private String nome;

@Column(nullable=false, unique=true)
@MapKeyColumn(columnDefinition = "varchar(255)")
private String login;

@Column(nullable=false, length=500)
@NotNull
private String senha;

@Column(nullable=false, unique=true)
@MapKeyColumn(columnDefinition = "varchar(255)")
@NotNull
private String email;

@Enumerated(EnumType.STRING)
private StatusUsuario status;

@OneToMany(mappedBy="usuario")
private List<GrupoUsuario> usuarioGrupos;

public Long getId() {
	return Id;
}

public void setId(Long id) {
	Id = id;
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public String getLogin() {
	return login;
}

public void setLogin(String login) {
	this.login = login;
}

public String getSenha() {
	return senha;
}

public void setSenha(String senha) {
	this.senha = senha;
}

public String getEmail() {
	return email;
}

public void setEmail(String email) {
	this.email = email;
}

public StatusUsuario getStatus() {
	return status;
}

public void setStatus(StatusUsuario status) {
	this.status = status;
}

public List<GrupoUsuario> getUsuarioGrupos() {
	return usuarioGrupos;
}

public void setUsuarioGrupos(List<GrupoUsuario> usuarioGrupos) {
	this.usuarioGrupos = usuarioGrupos;
}

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

@Entity
@Table(uniqueConstraints=@UniqueConstraint(columnNames={“usuario_id”,“grupo_id”}))
public class GrupoUsuario implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue
private Long id;

@ManyToOne(fetch=FetchType.LAZY)
private Grupo grupo;

@ManyToOne(fetch=FetchType.LAZY)
private Usuario usuario;

public Long getId() {
	return id;
}

public void setId(Long id) {
	this.id = id;
}

public Grupo getGrupo() {
	return grupo;
}

public void setGrupo(Grupo grupo) {
	this.grupo = grupo;
}

public Usuario getUsuario() {
	return usuario;
}

public void setUsuario(Usuario usuario) {
	this.usuario = usuario;
}

}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

[RESOLVIDO] Agora entendi que minha dificuldade estava na criação da query com Criteria do Hibernate.
Consegui resolver criando queries com “setFetchMode” e carregando as informações adicionais quando necessário…