jpa 查询未执行,抛出异常

piwo6bdm  于 2023-01-02  发布在  其他
关注(0)|答案(1)|浏览(145)

我目前正在做大学里的一个JPA项目,我遇到了一些查询问题,特别是@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;
}

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

WARNING: #{searchBean.fillCandidatesOps}: java.lang.IllegalArgumentException: org.hibernate.QueryException: Not all named parameters have been set: [firstName, name] [select generatedAlias0 from Candidate as generatedAlias0 where ( generatedAlias0.name=:name) and ( generatedAlias0.firstLastName=:firstName)]

错误/问题在哪里?
我已经阅读了这些主题,但没有找到解决问题的方法。
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?

p8h8hvxi

p8h8hvxi1#

由于这两个链接的线程已经足够清楚地告诉您(所以不知道为什么您“看了5天”而没有注意到这一点),您需要设置在该查询中定义的参数的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();

相关问题