Galera estou com um problema e preciso da ajuda de vocês.
Tenho uma aplicação JSF que faz buscas com JPA, o problema é o seguinte quando busco por uma entity solicitação que possui atributos como modulo,grupo e atendimento.
Se eu passar como parâmetros o modulo e atendimento ou grupo e atendimento ele traz resultados, mas se eu passar apenas o atendimeno ele não traz nenhum registro, o que não é verdade, pois ja dei um select somente com o atendimento e no banco ele traz registros, vou passar o codigo para que possam das uma olhada:
JSP
<tr>
<td>
<tr:selectOneChoice id="modulos" value="#{painelSolicitacaoBean.solicitacoesPendentesBusca.modulo}"
valueChangeListener="#{painelSolicitacaoBean.filtrarModulo}"
binding="#{painelSolicitacaoBean.selModulo}"
autoSubmit="true" unselectedLabel="Escolha um Módulo" >
<t:selectItems value="#{painelSolicitacaoBean.listaModulos}" var="modulo" itemLabel="#{modulo.descr}" itemValue="#{modulo.id}"/>
</tr:selectOneChoice>
</td>
<!-- rendered="painelSolicitacaoBean.mostraFiltroDetalhes}" -->
<td style="#{painelSolicitacaoBean.mostraFiltroDetalhes}">
<tr:selectOneChoice id="detalhes" value="#{painelSolicitacaoBean.detalhesBuscaTipo}"
unselectedLabel="Escolha um detalhe"
valueChangeListener="#{painelSolicitacaoBean.filtrarDetalhes}"
binding="#{painelSolicitacaoBean.selDetalhes}"
autoSubmit="true" >
<f:selectItems value="#{painelSolicitacaoBean.listaDetalhesFiltro}"/>
</tr:selectOneChoice>
</td>
<td>
<tr:selectOneChoice id="unidades" value="#{painelSolicitacaoBean.grupoLocal.codigo}" valueChangeListener="#{painelSolicitacaoBean.filtrarUnidade}" autoSubmit="true" unselectedLabel="Escolha uma unidade" >
<t:selectItems value="#{painelSolicitacaoBean.listaUnidades}" var="grupo" itemLabel="#{grupo.nome}" itemValue="#{grupo.codigo}"/>
</tr:selectOneChoice>
</td>
<td>
<tr:selectOneChoice value="#{painelSolicitacaoBean.solicitacoesPendentesBusca.atrasoCor}" id="urgencia" valueChangeListener="#{painelSolicitacaoBean.filtrarAtrasoCor}" autoSubmit="true" unselectedLabel="Escolha um tipo de prioridade" >
<tr:selectItem value="verde" label="Verde"/>
<tr:selectItem value="amarelo" label="Amarelo"/>
<tr:selectItem value="vermelho" label="Vermelho"/>
</tr:selectOneChoice>
</td>
<td class="rotuloCampo">
<tr:inputText id = "atendimento" columns="10" value="#{painelSolicitacaoBean.solicitacoesPendentesBusca.atendimento}" autoSubmit="true">
<tr:convertNumber type="number" pattern="000000"/>
</tr:inputText>
</td>
<td>
<tr:commandButton action="#{painelSolicitacaoBean.filtrar}" id="cmdRecarregar" text="Filtrar" />
</td>
</tr>
PainelSolicitacaoBean.java
public void filtrar() {
recarregar();
}
public void recarregar(){
if (SpringSecurityELFunctions.isUserInRole("FUNC_PAINEL_SOL")) {
if (solicitacoesPendentesBusca.getModulo() != null || solicitacoesPendentesBusca.getLocalOrigem() != null || solicitacoesPendentesBusca.getAtendimento() != null){
filtrarAtendimento();
solicitacoesPendentesBusca.setStatus(StatusSolicitacao.AGUARDANDO.getId());
setSolicitacoesPendentes(new PagingCollectionModel(getTblSolicitacoesPendentes().getRows(), solicitacaoService, solicitacoesPendentesBusca));
solicitacoesIniciadasBusca.setStatus(StatusSolicitacao.CONFIRMADA.getId());
setSolicitacoesIniciadas(new PagingCollectionModel(getTblSolicitacoesIniciadas().getRows(), solicitacaoService, solicitacoesIniciadasBusca));
solicitacoesFinalizadasBusca.setDataFinalSolicitacao(new Date());
setSolicitacoesFinalizadas(new PagingCollectionModel(getTblSolicitacoesFinalizadas().getRows(), solicitacaoService, solicitacoesFinalizadasBusca));
} else{
setSolicitacoesPendentes(null);
setSolicitacoesIniciadas(null);
setSolicitacoesFinalizadas(null);
}
}
}
PagingCollectionModel.java
public PagingCollectionModel(int pageSize, PaginatedService service, Object searchObject) {
super();
this.service = service;
this.searchObject = searchObject;
this.count = service.count(searchObject);
this.pageSize = pageSize > 0 ? pageSize : count;
//Calcula o total de páginas
int totalPages = (int)Math.ceil((double)count / pageSize);
pagingList = new ArrayList(totalPages);
//inicializa os dados de cada página com null
for (int i = 0; i < totalPages; i++) {
pagingList.add(null);
}
//traz a primeira página
if(count > 0){
fetch(0);
}
}
AbstractCrudService.java
public int count(Entity example) {
return ((Number) createCriteriaExample(example).setProjection(
Projections.rowCount()).uniqueResult()).intValue();
}
O metodo count é onde é feito a busca .
@Entity(name = "Solicitacao")
@Table(name = "CLUF_SOLICITACAO", schema = "CLUF")
public class Solicitacao implements Serializable{
@Id
@Column(name = "CD_SOLICITACAO", length = 15, nullable = false)
private Integer codigo;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "CD_LOCAL_ORIGEM", updatable = false)
private Local localOrigem;
@Column(name = "STATUS", length = 1, nullable = false)
private String status;
@Column(name = "TIPO", length = 1, nullable = false, updatable = false)
private Integer modulo;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "CD_SOLICITACAO", updatable = false)
public Detalhe detalhes;
@Column(name = "ATENDIMENTO_MV",nullable = false)
private Long atendimento;