在使用HQL语句查询时,以Oracle为例
to_number(to_char(date类型,'MM'))  标准获取日期月份的函数
将函数防治HQL语句中作为条件查询,及 where to_number(to_char(date类型,'MM'))无任何问题,
但是作为查询结果时,报出Hibernate认不到函数的错误,及 select to_number(to_char(date类型,'MM')) from ....
错误代码为 java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.MethodNode 
 \-[METHOD_CALL] MethodNode: '('
    +-[METHOD_NAME] IdentNode: 'DATEDIFF' {originalText=to_number}
    \-[EXPR_LIST] SqlNode: 'exprList'
       +-[IDENT] IdentNode: 'd' {originalText=to_char}
       +-[QUOTED_STRING] LiteralNode: ''MM''
在网上找了下,发现基本上是函数认不到的异常,但是很是奇怪的是,为何单单使用该函数作为条件查询的时候就没有问题。
有兴趣的朋友可以试下。
另外如何注册自函数,有资料的朋友可以发个链接。十分感谢!

解决方案 »

  1.   

    如果真的出现了比如这些数据库特性的东西  尽量使用 执行标准的sql来解决吧
      

  2.   

     这几天被还hibernate跟Oracle主键冲突搞的火了。。哎
      

  3.   

    Hql确实不行的,你可以先准备好想对应的数据添加到sql语句中就行了。这是hibernate的问题,没必要追根问底的...
      

  4.   

    也许是你的to_number函数问题吧
      

  5.   

    HQL 和标准SQL 差距很大 很多具体数据库的方法和和写法都不支持
    用createSQLQuery 执行SQL吧
      

  6.   

    to_number(to_char(date类型,'MM')) 这句不对吧,字符型怎么转成数字型?
    select to_char(date类型,'MM')) from YourObject 这个HQL语句是没有问题的
      

  7.   

    因为hql并不是万能的,所以使用hql解决不了就用sql,创建原生sql 使用createSQLQuery方法。