sexta-feira, 24 de março de 2017

Exemplo JPQL x Criteria

JPQL
public List<Empresa> buscarPorEmpresa(Usuario usuario, String nomeEmpresa, Calendar dataInicio, Calendar dataFim){
    if(usuario != null && usuario.getContabilidade() != null){
        
        String queryEmpresa = "";
        if( (nomeEmpresa == null || nomeEmpresa.isEmpty()) && dataInicio != null && dataFim != null){
            queryEmpresa = " and o.dataInicio between '" + dataInicio.getTime() + "' and '" + dataFim.getTime() + "'";
        }else if( (nomeEmpresa != null && !nomeEmpresa.isEmpty()) && dataInicio != null && dataFim != null){
            queryEmpresa = " and lower(o.nomeEmpresa) like '" + nomeEmpresa.toLowerCase() + "%' and "
                         + "o.dataInicio between '" + dataInicio.getTime() + "' and '" + dataFim.getTime() + "'";
        }else {
            if(nomeEmpresa == null || nomeEmpresa.isEmpty()){
                return null;
            }
            queryEmpresa = " and lower(o.nomeEmpresa) like '" + nomeEmpresa.toLowerCase() + "%'";
        }
                
        TypedQuery<Empresa> q = em.createQuery("select o"
                               + " from " + Empresa.class.getName() + " o"
                               + " where "
                               + " o.contabilidade = " + usuario.getContabilidade().getId()
                               + queryEmpresa, Empresa.class);
        
        return q.getResultList();
    }else {
        return null;
    }
}

Criteria

public List<Empresa> buscarPorEmpresa(Usuario usuario, String nomeEmpresa, Calendar dataInicio, Calendar dataFim){
    if(usuario != null && usuario.getContabilidade() != null){

        CriteriaBuilder cb = em.getCriteriaBuilder();
        CriteriaQuery<Empresa> cq = cb.createQuery(Empresa.class);
        Root<Empresa> root = cq.from(Empresa.class);
        cq.select(root);
                    
        if( (nomeEmpresa == null || nomeEmpresa.isEmpty()) && dataInicio != null && dataFim != null){
            cq.where(cb.between(root.get("dataInicio"), dataInicio, dataFim));
        }else if( (nomeEmpresa != null && !nomeEmpresa.isEmpty()) && dataInicio != null && dataFim != null){
            cq.where(cb.between(root.get("dataInicio"), dataInicio, dataFim));
            cq.where(cb.like(cb.lower( root.get("nomeEmpresa") ), nomeEmpresa.toLowerCase() + "%"));
        }else {
            if(nomeEmpresa == null || nomeEmpresa.isEmpty()){
                return null;
            }                
            cq.where(cb.like(cb.lower( root.get("nomeEmpresa") ), nomeEmpresa.toLowerCase() + "%"));                
        }
                    
        TypedQuery<Empresa> query = em.createQuery(cq);
        
        return query.getResultList();
        
    }else {
 return null;
    }
}




Nenhum comentário:

Postar um comentário