3
respostas

Filtrar por campo em branco

    public List<Produto> buscarPorParametrosComCriteria(String nome, 
            BigDecimal preco, LocalDate dataCadastro) {

        CriteriaBuilder builder = em.getCriteriaBuilder();
        CriteriaQuery<Produto> query = builder.createQuery(Produto.class);
        Root<Produto> from = query.from(Produto.class);

        Predicate filtros = builder.and();
        if (nome != null && !nome.trim().isEmpty()) {
            filtros = builder.and(filtros, builder.equal(from.get("nome"), nome));
        }
        if (preco != null) {
            filtros = builder.and(filtros, builder.equal(from.get("preco"), preco));
        }
        if (dataCadastro != null) {
            filtros = builder.and(filtros, builder.equal(from.get("dataCadastro"), dataCadastro));
        }

        if (sexo != null) {
            filtros = builder.and(filtros, builder.equal(from.get("sexo"), sexo));
        }else{
            filtros = builder.and(filtros, builder.equal(from.get("sexo"), " "));
        }
        query.where(filtros);

        return em.createQuery(query).getResultList();
    }

Se o campo sexo vier vazio ou nulo, como seria a implementação da pesquisa?

3 respostas

Oi Jader,

Deixando apenas o if a consulta não vai filtrar pelo campo sexo quando ele for nulo ou vazio:

if (sexo != null) {
    filtros = builder.and(filtros, builder.equal(from.get("sexo"), sexo));
}

Sim professor, você está certo no caso de não filtrar. Mas no caso seria querer fazer a pesquisa de um campo vazio ou nulo.

Ah sim, nesse caso você pode usar o isNull do CriteriaBuilder:

if (sexo != null) {
    filtros = builder.and(filtros, builder.equal(from.get("sexo"), sexo));
} else {
    filtros = builder.and(filtros, builder.isNull(from.get("sexo")));
}