带有PageRequest和Predicate的Spring Data JPA失败

时间:2016-04-20 08:38:48

标签: java spring jpa spring-data

我使用Spring数据Jpa规范,我想获得非重复注册表,所以我在查询中使用了不同的。

public static Specification<Actividad> criteriosConsultaGruposHandling(final String cif, final String razonSocial, final String nombreComercial, final List<Long> idsHandling) {

    Specification<Actividad> spec = new Specification<Actividad>() {

        @Override
        public Predicate toPredicate(Root<Actividad> root, CriteriaQuery<?> query, CriteriaBuilder cb) {

            query.distinct(true);

            List<Predicate> predicates = new ArrayList<Predicate>();
            if(cif != null && !cif.equals("")){
                predicates.add(cb.like(cb.upper(root.join(Actividad_.empresa).get(Empresa_.cif)), "%" + cif.toUpperCase() + "%" ));
            }
            if(razonSocial != null && !razonSocial.equals("")){
                predicates.add(cb.like(cb.upper(root.join(Actividad_.empresa).get(Empresa_.razonsocial)), "%" + razonSocial.toUpperCase() + "%" ));
            }
            if(nombreComercial != null && !nombreComercial.equals("")){
                predicates.add(cb.like(cb.upper(root.join(Actividad_.empresa).get(Empresa_.nombrecomercial)), "%" + nombreComercial.toUpperCase() + "%" ));
            }
            if(idsHandling != null && !idsHandling.isEmpty()){
                Predicate pred = cb.conjunction();
                pred.getExpressions().add(root.join(Actividad_.grupohandlingactividads).get(Grupohandlingactividad_.grupohandling).get(Grupohandling_.idsubgrupo).in(idsHandling));
                predicates.add(pred);                   
            }

            return cb.and(predicates.toArray(new Predicate[0]));
        }
    };

    return spec;
}

}

但是当我使用规范和pagerequest执行findAll时,查询产生的页面不好

Specification<Actividad> specificationActividad = ActividadSpecifications.criteriosConsultaGruposHandling(actividadForm.getEmpresa().getCif(), 
            actividadForm.getEmpresa().getRazonsocial(), actividadForm.getEmpresa().getNombrecomercial(),listaGruposAsignados);
    PageRequest pageRequest = new PageRequest(actividadForm.getPagina() -1, actividadForm.getMaxRegistros(), actividadForm.getOrder());
    Page<Actividad> resultados = actividadRepository.findAll(specificationActividad, pageRequest);

当我在没有pageRequest参数的情况下调用findAll时,我获得了没有重复的行,但是当我用它调用它时,不会消除重复的行。 有人可以帮帮我吗?提前致谢!

0 个答案:

没有答案