【问题标题】:JPA Query not executing, throwing exceptionJPA 查询未执行,抛出异常
【发布时间】:2016-12-26 18:14:53
【问题描述】:

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

我目前正在从事我大学的一个 JPA 项目。我在使用 Query 时遇到问题,尤其是在接收大量参数的 @Service 类上的 Method。

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

方法如下。

@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] [select generatedAlias0 from Candidate 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?

谢谢大家。

【问题讨论】:

    标签: jpa


    【解决方案1】:

    正如 2 个链接线程告诉您的足够清楚(所以不知道为什么您“看了 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();
    

    【讨论】:

    • 嘿,尼尔,感谢您的回复。我确实尝试过,但我没有得到任何结果,我的意思是,列表返回 null 。当然,我确实尝试使用它在数据库上的“名称”查询此查询,以查看列表是否未返回 null。
    • 如果你这样做了,那么也许你应该在你的问题中这样说(这表示你有一个关于缺少参数的异常),因为这回答了这个问题。然后你调试它......通过查看你选择的 JPA 提供程序调用的 SQL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 2013-07-24
    • 1970-01-01
    • 2013-11-13
    • 2021-06-29
    • 1970-01-01
    • 2015-09-02
    相关资源
    最近更新 更多