我有以下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错误,或者一个好的解决方法也会很好。
编辑:我忘了提到即使使用命名参数我也会得到同样的错误。
答案 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;并有两个提示:
如前所述 - 我的答案是澄清这个Thread,以防你来自简单的java.sql。
答案 3 :(得分:-3)
query.setParameter(0,someVarId)需要: query.setParameter(1,someVarId)