0

我已经缩小了这样的问题:

  1. final String[] 具体查询字符串 = QuerySplitter.concreteQueries( hql, factory ); 在 session.createQuery() 内部调用。
    传递给它的 Hql 参数是 = FROM com.persistence.hibernate.pojo.CC WHERE ID = :ID

  2. 上述函数返回一个空字符串数组对象。因此,concreteQueryStrings = [];

  3. 因为这个长度=concreteQueryStrings.length 是0;

  4. 因此,发生了以下两个悲伤的事件。参数元数据=新的参数元数据(空,空);返回元数据=空;

  5. 这导致 query.setParameter("ID", 5); 抛出 QueryParameterException。这显然是错误的。我的 HQL 有什么问题导致具体查询()返回空白?

顺便说一句,我有休眠 3.4。

谢谢-阿努普

4

1 回答 1

0

查看您的 Hql 参数,我会说您的选择语法可能有问题。让我们来看看:

CC 真的是一个类名,还是一个类的别名?(在命名一个类时,总是尽量描述你能描述的大部分内容,这将有助于你以后的编码)。

如果 CC 不是类名,则将路径com.persistence.hibernate.pojo.CC更改为正确引用您的类的内容:com.persistence.hibernate.pojo.ContentClass

在说明这一点之后,您将需要为您的班级创建一个别名。这种情况下,可以正常使用别名CC,我们看看:

com.persistence.hibernate.pojo.ContentClass cc

最后,您必须定义您在查询中选择的任何对象的类的别名,否则结果将不是预期的。因此,您必须更改 WHERE 语法的第一个参数来满足此要求,如下所示:

哪里 cc.ID = :ID

最后,您会看到查询的语法发生了一些变化,因此请尝试通过以下方式更改您的实际查询:

com.persistence.hibernate.pojo.ContentClass cc WHERE cc.ID = :ID

希望它可以帮助你,让我知道它是否还没有工作。

于 2014-03-11T04:48:44.550 回答