我目前正在做大学里的一个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?
1条答案
按热度按时间p8h8hvxi1#
由于这两个链接的线程已经足够清楚地告诉您(所以不知道为什么您“看了5天”而没有注意到这一点),您需要设置在该查询中定义的参数的VALUE。