Consulta com a API "Criteria" em um relacionamento Many-to-Many

3 respostas
D

Classes Relacionadas.

  • Usuario 1:N -> PermissaoAcesso <- N:1 GrupoAtendimento

Tenha uma tela (JSF) que mostra os dados cadastrais do usuario e gostaria que mostrasse também todas as permissões de Acesso (PermissaoAcesso) dentro de um grid. O problema é que não estou conseguindo filtrar as permissões de acesso tendo como filtro a classe usuário. Como retornar a permissão que está na classe “PermissaoAcesso” sendo que a consulta é realizada pela classe “PermissaoAcessoPK” ?

Seguem as classes.

@Entity

@Table(name = usuario)

@NamedQueries({})

public class Usuario implements Serializable {

private static final long serialVersionUID = 1L;

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)

@Column(name = CODIGO, nullable = false)

private Integer codigo;

@Column(name = NOME)

private String nome;

@Column(name = ATIVO)

private String ativo;

@Column(name = SENHA)

private String senha;

@Column(name = PERMISSAOADM)

private Character permissaoadm;

@Column(name = EMAIL)

private String email;

@Column(name = LOGIN)

private String login;

//gets e sets

}


@Entity

@Table(name = grupoatendimento)

@NamedQueries({})

public class GrupoAtendimento implements Serializable {

private static final long serialVersionUID = 1L;

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)

@Column(name = CODIGO, nullable = false)

private Integer codigo;

@Column(name = NOME)

private String nome;

@Column(name = ATIVO)

private Character ativo;

//gets e sets
}


Abaixo relacionamento N:N

@Embeddable
public class PermissaoAcessoPK implements Serializable {

private static final long serialVersionUID = -6197593475314743037L;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="usuario_codigo", insertable=true, updatable=true)
private Usuario usuario;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="grupoatendimento_codigo", insertable=true, updatable=true)
private GrupoAtendimento grupoAtendimento;

//gets e sets
}


@Entity
@Table(name = “permissaoacesso”)
@NamedQueries({})

public class PermissaoAcesso implements Serializable {

@EmbeddedId

private PermissaoAcessoPK primaryKey = new PermissaoAcessoPK();
@Column(name="permissao", nullable=false)
private String permissao;

//gets e sets

}


A classe UsuarioController tem um método que retorna um “model”.

public class UsuarioController {

private Usuario usuario;
private DataModel model;
private Session session;

public DataModel getTodos1() throws GenericoDAOException{

session = ConnectHibernateFactory.getInstance();

Criteria select = session.createCriteria(PermissaoAcessoPK.class);

select.add(Restrictions.eq(usuario”, usuario) ) ;

select.list();

model = new ListDataModel((List) select);

return model;

}

Preciso mostrar na tela a permissão e o grupo atendimento.

Usuário: Fulano

Permissão Grupo Atendimento
Atender Assistência Técnica
Encaminhar Desenvolvimento de Softwares


Página JSF

<h:dataTable value=’#{usuarioView.todos1}’ var=‘item’ border=“1” styleClass=“tabela” headerClass=“cabecalho” rowClasses=“linha_a, linha_b” width=“100%”>

<h:column>

<f:facet name=“header”>

<h:outputText value=“Permissão”/>

</f:facet>

<h:outputText value="#{item.permissao}"/>      ???

</h:column>

<h:column>

<f:facet name=“header”>

<h:outputText value=“GrupoAtendimento”/>

</f:facet>

<h:outputText value="#{item.getGrupoAtendimento.getNome}"/>

</h:column>
</h:dataTable>

Alguma sugestão ???

3 Respostas

von.juliano

Eu sugiro que você leia esse post e então formate o seu post , porque do jeito que está, dificilmente alguém vai ler amigo.

Blz? Flw! :thumbup:

von.juliano

[DUPLICADO]

D

Ok. Obrigado!! Estou formatando minha mensagem.

Criado 11 de janeiro de 2009
Ultima resposta 12 de jan. de 2009
Respostas 3
Participantes 2