从简单的HQL查询中获取无效的参数索引1
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从简单的HQL查询中获取无效的参数索引1相关的知识,希望对你有一定的参考价值。
我有以下HQL查询,为简单起见,我们假设映射和表名称是正确的。
String queryString = "from entity as vv inner join vv.childentity as vis with childentityid=?";
Query query = session.createQuery(queryString);
query.setParameter(0, someVarId);
List<entity> entities = query.list();
尝试执行此操作时出现以下错误:
错误:无法将值'12'绑定到参数:1;参数索引1无效。
我怀疑这可能是因为HQL隐式地不支持WITH子句中的绑定参数。我找不到任何文档说这是不支持的,我是RTFM。
任何人都可以确认这是真的,或者这是一个已知的Hibernate错误,或者一个好的解决方法也会很好。
编辑:我忘了提到即使使用命名参数我也得到相同的错误。
答案
我想你需要在with
子句中使用全名:
from entity as vv inner join vv.childentity as vis with vis.childentityid=?"
另一答案
谢谢你的帮助,但我发现了怪异。
当我在HQL中加入两个对象时,应该这样做。
from entity as vv where childentityid=?
我发现我实际上并不需要加入它们,我没有给HQL足够的信用来查看对象映射并确定该实体有一个名为childentity的属性,因此childentityid是它的唯一标识符。
谢谢你的帮助。
另一答案
与您的确切问题没有直接关系,但我是通过搜索引擎来到这个线程的。
有相同的错误'无效的参数索引1'并有两个提示:
- 对于所有来自简单的java.sql。 zach是对的 - 你必须从1开始计数。对于JBoss / HBL,你必须开始计数0。
- 我的实际错误是我在占位符周围使用了引号。 (例如“SELECT foo FROM bar WHERE foobar like'?';”)
如前所述 - 我的答案是澄清这个Thread,以防你来自简单的java.sql。
另一答案
query.setParameter(0,someVarId)需要是:query.setParameter(1,someVarId)
以上是关于从简单的HQL查询中获取无效的参数索引1的主要内容,如果未能解决你的问题,请参考以下文章