在使用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''
在网上找了下,发现基本上是函数认不到的异常,但是很是奇怪的是,为何单单使用该函数作为条件查询的时候就没有问题。
有兴趣的朋友可以试下。
另外如何注册自函数,有资料的朋友可以发个链接。十分感谢!
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''
在网上找了下,发现基本上是函数认不到的异常,但是很是奇怪的是,为何单单使用该函数作为条件查询的时候就没有问题。
有兴趣的朋友可以试下。
另外如何注册自函数,有资料的朋友可以发个链接。十分感谢!
用createSQLQuery 执行SQL吧
select to_char(date类型,'MM')) from YourObject 这个HQL语句是没有问题的