祝大家圣诞快乐,新年快乐。
我目前正在使用我大学的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天,我真的在系统的开发背后,我真的需要一些提示:)
我已经阅读过这个主题,并没有找到解决我问题的方法。
How to solve "org.hibernate.QueryException: Not all named parameters have been set" error?
谢谢大家。
答案 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();