我正在尝试计算用户使用的过滤器的行数,当用户想要列出所有可以正常使用的过滤器时,问题出在他们使用过滤器的时候,这会使某些联接正常工作。
(这用于jsf中的惰性数据表)
我的标准代码是:
CriteriaBuilder cb = em.getcriteriaBuilder();
CriteriaQuery<CarreraHorizontal> cq = cb.createQuery(CarreraHorizontal.class);
Root<CarreraHorizontal> root = cq.from(CarreraHorizontal.class);
CriteriaQuery<Long> cqCount = cb.createQuery(Long.class);
List<Predicate> predicates = new ArrayList<Predicate>();
Join<CarreraHorizontal,Gdp> childJoin = root.join("gdp",JoinType.LEFT);
Join<CarreraHorizontal,Empleado> childJoin2 = root.join("empleado",JoinType.LEFT);
if (!StringUtils.isBlank(grupoTitulacion))
predicates.add(cb.like(root.<String>get("grupoTitulacion"),"%" + grupoTitulacion + "%"));
if(gdp0Bool) {
predicates.add(cb.like(childJoin.<String>get("nombre"),"GDP0"));
if(!StringUtils.isBlank(gdp0Combo))
predicates.add(cb.le(childJoin.<Integer>get("numEscalones"),Integer.parseInt(gdp0Combo)));
}
if(epg6) {
predicates.add(cb.equal(childJoin2.get("progresionescalon"),epg6));
}
//cq.where(cb.and(predicates.toArray(new Predicate[predicates.size()])));
cqCount.where(cb.and(predicates.toArray(new Predicate[predicates.size()])));
Root<CarreraHorizontal> rootCount = cqCount.from(CarreraHorizontal.class);
CriteriaQuery<Long> a = cqCount.select(cb.count(rootCount));
TypedQuery<Long> res = em.createQuery(a.select(cb.count(rootCount)));
return res.getSingleResult();
我的例外是:
无效的路径:'generatedAlias1.progresionescalon'[从es.valencia.gp.sbch.entity.CarreraHorizontal中选择count(generatedAlias0)作为generateAlias0,其中generateAlias1.progresionescalon =:param0]
我尝试了发现的所有内容,但仍无法正常工作。