Session.createQuery()无法正常工作

时间:2014-03-11 01:48:48

标签: hibernate session exception query-parameters hibernate-session

我已经缩小了这个问题:

  1. final String [] concreteQueryStrings = QuerySplitter.concreteQueries(hql,factory);在session.createQuery()中调用。
    传递给它的Hql param是= FROM com.persistence.hibernate.pojo.CC WHERE ID =:ID

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

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

  4. 由于这个原因,发生了以下两个悲惨事件。 parameterMetadata = new ParameterMetadata(null,null); returnMetadata = null;

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

  6. BTW我有休眠3.4。

    由于 -Anup

1 个答案:

答案 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

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