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;
    }
}




quinta-feira, 9 de março de 2017

WiildFly: Muitos dados no p:dataTable não permitem a edição de linhas e colunas | Too much data in p:dataTable results in broken row/cell edit submits

Solução

Aumentar o max-parameters de 1000 (padrão) para um valor mais adequado.

<server name="default-server">
    <http-listener name="default" socket-binding="http" max-parameters="10000"/>
    <host name="default-host" alias="localhost">
        <location name="/" handler="welcome-content"/>
        <filter-ref name="server-header"/>
        <filter-ref name="x-powered-by-header"/>
    </host>
</server>