Daí galera, tudo certo? Bem, estou fazendo alguns filtros em meu projeto utilizando Fk’s e Left join. Pois bem, o que está funcionando perfeitamente fiz da seguinte maneira:
Filtro o acervo pelo tipo do material, ou seja a é o prefixo do objeto; acetimate é o objeto do TipoMaterial (Tipo Material acetipomate --> que eu tenho no domínio de acervo) e tipoDescricao é a String que eu tenho no TipoMaterial.
Abaixo está o código:
public List<Acervo> findAcervoByTipoMaterial(String tipoDescricao) {
if (tipoDescricao == null) {
return null;
}
FiltrosConsulta filtros = new FiltrosConsulta();
filtros.add("a.acetipomate.tipoDescricao = :acetipomate", "acetipomate", tipoDescricao, false, null);
List<Acervo> acervolista = crudService.executeQuery("select a from Acervo a left join fetch a.acetipomate ", filtros);
return acervolista;
}
No meu xhtml:
<tr>
<td align="right">Tipo do Material:</td>
<td>
<p:selectOneMenu value="#{emprestimosxExemplaresJsfBean.tipoDescricao}">
<f:selectItem itemLabel="Todos" itemValue="#{null}"/>
<f:selectItems value="#{emprestimosxExemplaresJsfBean.tipoMaterialList}" var="m" itemLabel="#{m.tipoDescricao}" itemValue="#{m.tipoCodigo}"/>
<f:ajax immediate="" render="acervofiltro" event="change" listener="#{emprestimosxExemplaresJsfBean.atualizarTipoMaterial(event)}" />
</p:selectOneMenu>
</td>
</tr>
<tr>
<td align="right">Acervo:</td>
<td>
<p:selectOneMenu id="acervofiltro" value="#{emprestimosxExemplaresJsfBean.aceTitulo}">
<f:selectItem itemLabel="Todos" itemValue="#{null}"/>
<f:selectItems value="#{emprestimosxExemplaresJsfBean.acervoList}" var="a" itemLabel="#{a.aceTitulo}" itemValue="#{a.aceCodigo}" />
</p:selectOneMenu>
</td>
</tr>
Já nesse que vou postar abaixo tenho que percorrer o seguinte caminho:
exe sendo o prefixo do objeto de empréstimoXexemplar; emxexCodemprest sendo o objeto para ir no Emprestimos; empCodusuario sendo o objeto para ir de Emprestimo para Usuario, usuCodigo, o integer que tenho no Usuario e usuNome, o nome do mesmo.
Nesse filtro, “pego” todos os empréstimos pendentes a partir de cada usuario.
Abaixo, o filtro:
public List<EmprestimosxExemplares> findEmpXExeByUsuario(String renCodemxex) {
if (renCodemxex == null) {
return null;
}
FiltrosConsulta filtros = new FiltrosConsulta();
filtros.add("exe.emxexCodemprest.empCodusuario.usuCodigo = :usuNome", "usuNome", renCodemxex, false, null);
List<EmprestimosxExemplares> empXexelista = crudService.executeQuery("select exe from EmprestimosxExemplares exe left join fetch exe.emxexCodemprest ", filtros);
return empXexelista;
}
Então, não estou conseguindo fazer esse left join…já pesquisei, me basiei em alguns, mas não deu muito certo.
Se alguém puder ajudar, Agradeço .