Java 带有PageRequest和谓词失败的Spring数据JPA
我使用的是SpringDataJPA规范,我希望获得非repetead注册表,所以我在这样的查询中使用distinctJava 带有PageRequest和谓词失败的Spring数据JPA,java,spring,jpa,spring-data,Java,Spring,Jpa,Spring Data,我使用的是SpringDataJPA规范,我希望获得非repetead注册表,所以我在这样的查询中使用distinct public static Specification<Actividad> criteriosConsultaGruposHandling(final String cif, final String razonSocial, final String nombreComercial, final List<Long> idsHandling) {
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;
}
公共静态规范标准ConsultAgrupoShandling(最终字符串cif、最终字符串razonSocial、最终字符串NombRecommeric、最终列表idsHandling){
规格规格=新规格(){
@凌驾
公共谓词toPredicate(根根、CriteriaQuery查询、CriteriaBuilder cb){
query.distinct(true);
列表谓词=新的ArrayList();
如果(cif!=null&!cif.equals(“”){
add(cb.like(cb.upper(root.join(Actividad_.empresa.get(empresa_.cif)),“%”+cif.toUpperCase()+“%”);
}
如果(razonSocial!=null&&!razonSocial.equals(“”){
add(cb.like(cb.upper(root.join(Actividad_.empresa.get(empresa_.razonsocial)),“%”+razonsocial.toUpperCase()+“%”);
}
if(nombrecomerical!=null&!nombrecomerical.equals(“”){
add(cb.like(cb.upper(root.join(Actividad_.empresa.get(empresa_.nombrecomeral)),“%”“%”+nombrecomeral.toUpperCase()+“%”);
}
if(idsHandling!=null&&!idsHandling.isEmpty()){
谓词pred=cb.conjunction();
pred.getExpressions().add(root.join(Actividad_u.grupHandlingactividads).get(grupHandlingactividad_u.grupHandling).get(grupHandling_u.idsubgrupo).in(idsHandling));
谓词.add(pred);
}
返回cb.and(谓词toArray(新谓词[0]);
}
};
返回规格;
}
}
但是,当我使用规范和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);
规范规范actividad=ActividadSpecifications.criteriosConsultaGruposHandling(actividadForm.getEmpresa().getCif(),
actividadForm.getEmpresa().getRazonsocial(),actividadForm.getEmpresa().GetNombRecommerial(),ListAgruposaignados);
PageRequest PageRequest=新的PageRequest(actividForm.getPagina()-1,actividForm.getMaxRegistros(),actividForm.getOrder());
Page resultados=actividadRepository.findAll(规范actividad,页面请求);
当我在没有pageRequest参数的情况下调用findAll时,我获得的行没有重复,但当我使用它调用findAll时,不会删除重复的行。
有人能帮我吗?提前谢谢