【问题标题】:org.hibernate.QueryException: Not all named parameters have been set:[]org.hibernate.QueryException:并非所有命名参数都已设置:[]
【发布时间】:2013-08-12 04:40:17
【问题描述】:

我在 JPA 2.0 中遇到了非常奇怪的行为

我正在尝试构建一个看起来像的查询,其中employeeId 和empDepartment 是通过java 参数传递的长值

Query query=em.createQuery("SELECT e FROM Employee e WHERE e.empId = :empId and e.empDepartment = :empDepartment");
query.setParameter("empId" ,employeId);
query.setParameter("empDepartment",empDepartment);

但是上面的查询第一次不起作用,它产生了上面的错误,但是当我再次触发相同的方法时,一切都很顺利,每次都会发生这种情况,可能是什么原因?

【问题讨论】:

  • 你能告诉我们发生这种情况的整个方法吗?
  • 您必须在query.setParameter 调用周围有一些if 语句来阻止它们第一次执行。你能按照@chrylis 的建议发布完整的方法吗?

标签: java hibernate jpa


【解决方案1】:

你可以试试这个:

Query query=em.createQuery("SELECT e FROM Employee e WHERE e.empId = ? and  e.empDepartment = ?");
query.setParameter(1, employeId);
query.setParameter(2, empDepartment);

如果这也不起作用,那么您的查询内容也可能存在问题,而不是替换参数。也许类型不正确。参数类型由上下文推断。

【讨论】:

  • 根据 2021 年:现在不推荐这种方式。基于索引的参数化已被弃用,并且在最新版本的 Spring Data 中不受支持
【解决方案2】:
Query query=em.createQuery("SELECT e FROM Employee e WHERE e.empId=:empId and e.empDepartment=:empDepartment");

query.setParameter("empId" ,employeId);
query.setParameter("empDepartment",empDepartment);

我不知道是什么原因,但它曾经发生在我身上。像这样试试。只需删除 =:empId 和其他参数之间的空格即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多