JPA Query不执行,抛出异常

时间:2016-12-26 18:14:54

标签: jpa

祝大家圣诞快乐,新年快乐。

我目前正在使用我大学的JPA项目。我遇到了Query问题,特别是@Service类接收大量参数的方法。

首先,我试图让查询使用两个参数。

这是方法。

@Override
@Transactional ( readOnly = true )
public List<Candidate> obtainCandidatesOps(String name, String firstName,
        String secondName, String passport, CandidateType candidateType,
        Area area, Country country) {

    List<Candidate> resultList = new ArrayList<Candidate>();
    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Candidate> cq = cb.createQuery(Candidate.class);
    Root<Candidate> r = cq.from(Candidate.class);
    cq.where(cb.and(cb.equal(r.get("name"), cb.parameter(String.class, "name")),cb.equal(r.get("firstLastName"), cb.parameter(String.class, "firstName"))));
    cq.select(r);
    resultList = em.createQuery(cq).getResultList();
    return resultList;
}

当我尝试执行此查询时,我收到此错误:

警告:#{searchBean.fillCandidatesOps}:java.lang.IllegalArgumentException:org.hibernate.QueryException:并非所有命名参数都已设置:[firstName,name] [从Candidate中选择generatedAlias0 as generatedAlias0 where(generatedAlias0.name = :name)和(generatedAlias0.firstLastName =:firstName)]

错误/问题在哪里?我已经超过这个超过5天,我真的在系统的开发背后,我真的需要一些提示:)

我已经阅读过这个主题,并没有找到解决我问题的方法。

Caused by: org.hibernate.QueryException: Not all named parameters have been set: [isActive] [from User where isActive = :isActive]

How to solve "org.hibernate.QueryException: Not all named parameters have been set" error?

谢谢大家。

1 个答案:

答案 0 :(得分:0)

由于2个链接的线程告诉你足够清楚(所以不知道你为什么&#34;看了5天#34;并且没有注意到这一点),你需要设置你拥有的参数的VALUE在该查询中定义。

cq.where(cb.and(cb.equal(r.get("name"), cb.parameter(String.class, "name")),cb.equal(r.get("firstLastName"), cb.parameter(String.class, "firstName"))));
cq.select(r);
Query query = em.createQuery(cq);
query.setParameter("name", name);
query.setParameter("firstName", firstName);
resultList = query.getResultList();