我已经缩小了这个问题:
final String [] concreteQueryStrings = QuerySplitter.concreteQueries(hql,factory);在session.createQuery()中调用。
传递给它的Hql param是= FROM com.persistence.hibernate.pojo.CC WHERE ID =:ID
上面的函数返回一个空字符串数组对象。因此concreteQueryStrings = [];
因为这个长度= concreteQueryStrings.length是0;
由于这个原因,发生了以下两个悲惨事件。 parameterMetadata = new ParameterMetadata(null,null); returnMetadata = null;
这导致query.setParameter(“ID”,5);抛出QueryParameterException。 这显然是错误的。我的HQL导致concreteQueries()返回空白有什么问题?
BTW我有休眠3.4。
由于 -Anup
答案 0 :(得分:0)
看看你的Hql参数我会说你的select语法可能有问题。我们来看看:
CC真的是一个类名,还是一个类的别名? (总是尝试描述在命名clas时可以使用的大部分内容,这将有助于后者编码)。
如果CC不是类名,则将路径 com.persistence.hibernate.pojo.CC 更改为正确引用您的类: com.persistence.hibernate.pojo。内容类强>
在说明之后,您需要为您的班级创建一个别名。在这种情况下,您可以正常使用别名 CC ,让我们看一下:
com.persistence.hibernate.pojo.ContentClass cc
最后,你必须定义你在查询中选择的任何对象的类的别名,否则结果将不是预期的。因此,您必须更改WHERE语法的第一个参数以满足此要求,如下所示:
WHERE cc.ID =:ID
最后,您会看到您的查询的语法有一些变化,因此请尝试通过以下方式更改您的查询:
com.persistence.hibernate.pojo.ContentClass cc WHERE cc.ID =:ID
希望它可以帮助你,让我知道它是否还没有工作。