从简单的HQL查询中获取无效的参数索引1

时间:2011-05-16 15:08:32

标签: java hibernate hql

我有以下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错误,或者一个好的解决方法也会很好。

编辑:我忘了提到即使使用命名参数我也会得到同样的错误。

4 个答案:

答案 0 :(得分:1)

我猜您需要在with子句中使用全名:

from entity as vv inner join vv.childentity as vis with vis.childentityid=?"

答案 1 :(得分:1)

感谢您的帮助,但我发现了这种奇怪。

当我在HQL中加入两个对象时,应该这样做。

from entity as vv where childentityid=?

我发现我实际上并不需要加入它们,我没有给HQL足够的信用来查看对象映射并确定该实体有一个名为childentity的属性,因此childentityid是它的唯一标识符。

感谢您的帮助。

答案 2 :(得分:0)

与您的确切问题没有直接关系,但我是通过搜索引擎来找到这个帖子的。

有相同的错误&#39;无效的参数索引1&#39;并有两个提示:

  1. 所有来自简单的java.sql。 zach是对的 - 你必须从1开始计数。对于JBoss / HBL,你必须从0开始计数。
  2. 我的实际错误是我在占位符周围使用了引号。 (例如&#34; SELECT foo FROM bar WHERE foobar like&#39;?&#39;;&#34;)
  3. 如前所述 - 我的答案是澄清这个Thread,以防你来自简单的java.sql。

答案 3 :(得分:-3)

query.setParameter(0,someVarId)需要: query.setParameter(1,someVarId)