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

问题描述 投票:1回答:4

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

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

java hibernate hql
4个回答
1
投票

我想你需要在with子句中使用全名:

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

1
投票

谢谢你的帮助,但我发现了怪异。

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

from entity as vv where childentityid=?

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

谢谢你的帮助。


0
投票

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

有相同的错误'无效的参数索引1'并有两个提示:

  1. 对于所有来自简单的java.sql。 zach是对的 - 你必须从1开始计数。对于JBoss / HBL,你必须开始计数0。
  2. 我的实际错误是我在占位符周围使用了引号。 (例如“SELECT foo FROM bar WHERE foobar like'?';”)

如前所述 - 我的答案是澄清这个Thread,以防你来自简单的java.sql。


-3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.