Estou fazendo uma aplicação java utilizando primefaces 5.1 e queria usar o lazy loading para filtrar a pesquisa com um parâmetro de um enum (ESPERA). Para mostrar somente os pacientes que estiverem com esse tipo de status, mas estou com duvida sobre como fazer isso. Obrigado
Meu repository
@SuppressWarnings("unchecked")
public List<ListaEspera> filtrados(ListaFilter filtro) {
Criteria criteria = criarCriteriaParaFiltro(filtro);
criteria.setFirstResult(filtro.getPrimeiroRegistro());
criteria.setMaxResults(filtro.getQuantidadeRegistros());
return criteria.addOrder(Order.asc("id")).list();
}
public int quantidadeFiltrados(ListaFilter filtro) {
Criteria criteria = criarCriteriaParaFiltro(filtro);
criteria.setProjection(Projections.rowCount());
return ((Number) criteria.uniqueResult()).intValue();
}
private Criteria criarCriteriaParaFiltro(ListaFilter filtro) {
Session session = manager.unwrap(Session.class);
Criteria criteria = session.createCriteria(ListaEspera.class).createAlias("paciente", "p");
;
if (StringUtils.isNotBlank(filtro.getNome())) {
criteria.add(Restrictions.ilike("p.nome", filtro.getNome(), MatchMode.START));
}
if (StringUtils.isNotBlank(filtro.getIdentificacao())) {
criteria.add(Restrictions.ilike("p.identificacao", filtro.getIdentificacao(), MatchMode.EXACT));
}
if (StringUtils.isNotBlank(filtro.getTelefone())) {
criteria.add(Restrictions.ilike("p.telefone", filtro.getTelefone(), MatchMode.EXACT));
}
if (StringUtils.isNotBlank(filtro.getIdade())) {
criteria.add(Restrictions.ilike("p.idade", filtro.getIdade(), MatchMode.EXACT));
}
if (filtro.getSexos() != null && filtro.getSexos().length > 0) {
criteria.add(Restrictions.in("p.sexo", filtro.getSexos()));
}
if (filtro.getEsperando() != null && filtro.getEsperando().length > 0) {
criteria.add(Restrictions.in("p.status.ESPERA", filtro.getEsperando()));
}
return criteria;
}
}
Meu filtro
private String nome;
private String identificacao;
private String telefone;
private String idade;
private Sexo[] sexos;
private int primeiroRegistro;
private int quantidadeRegistros;
private StatusAgendamento[] esperando;
//gets e sets .....
Meu Bean
private LazyDataModel<ListaEspera> model;
@Inject
private Listas listas;
private ListaFilter filtro;
public PesquisaListaBean() {
filtro = new ListaFilter();
listasFiltradas = new ArrayList<>();
model = new LazyDataModel<ListaEspera>() {
private static final long serialVersionUID = 1L;
@Override
public List<ListaEspera> load(int first, int pageSize, String sortField, SortOrder sortOrder,
Map<String, Object> filters) {
filtro.setPrimeiroRegistro(first);
filtro.setQuantidadeRegistros(pageSize);
setRowCount(listas.quantidadeFiltrados(filtro));
return listas.filtrados(filtro);
}
};
}