Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JPA查询未执行,引发异常_Jpa - Fatal编程技术网

JPA查询未执行,引发异常

JPA查询未执行,引发异常,jpa,Jpa,祝大家圣诞快乐,新年快乐 我目前正在我大学的一个JPA项目中工作。我在查询方面遇到了问题,特别是@Service类上接收大量参数的方法 首先,我只是想让查询使用两个参数 这里是方法 @Override @Transactional ( readOnly = true ) public List<Candidate> obtainCandidatesOps(String name, String firstName, String secondName, String

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

我目前正在我大学的一个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;
}
当我尝试执行此查询时,收到以下错误:

警告:{searchBean.fillCandidatesOps}:java.lang.IllegalArgumentException:org.hibernate.QueryException:尚未设置所有命名参数:[firstName,name][从候选项中选择GenerateDias0作为GenerateDias0,其中GenerateDias0.name=:name和GenerateDias0.firstLastName=:firstName]

错误/问题在哪里?我已经讨论了5天多,我真的支持系统的开发,我真的需要一些提示:

我读过这些主题,但没有找到解决问题的方法


谢谢大家。

由于这两个链接的线程告诉您足够清楚,所以不知道为什么您已经查看了它们5天,却没有注意到这一点,因此您需要设置在该查询中定义的参数值

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();

嘿,尼尔,谢谢你的回复。我确实尝试过这个,但是我没有得到任何结果,我的意思是,列表返回空值。当然,我确实使用数据库中的名称尝试了这个查询,以查看列表是否返回空值。如果这样做了,那么您可能应该在问题中这样说,因为这回答了问题,您得到了一个关于缺少参数的异常。然后你调试它。。。通过查看所选JPA提供程序调用的SQL。