我有以下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'并有两个提示:
如前所述 - 我的答案是澄清这个Thread,以防你来自简单的java.sql。
query.setParameter(0,someVarId)需要是:query.setParameter(1,someVarId)