【发布时间】:2012-02-29 09:32:17
【问题描述】:
我正在使用 Hibernate3,尝试执行以下 HQL 查询,它给出了以下错误。
查询:select MAX(DATEDIFF(SECOND, startTime, endTime)) from Service_Master
java.lang.IllegalStateException: No data type for node: org.hibernate.hql.ast.tree.AggregateNode
+-[AGGREGATE] AggregateNode: 'MAX'
| \-[METHOD_CALL] MethodNode: '('
| +-[METHOD_NAME] IdentNode: 'DATEDIFF' {originalText=DATEDIFF}
| \-[EXPR_LIST] SqlNode: 'exprList'
| +-[IDENT] IdentNode: 'SECOND' {originalText=SECOND}
查询:select AVG(DATEDIFF(SECOND, startTime, endTime)) from Service_Master
java.lang.NullPointerException
at org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions$AvgFunction.determineJdbcTypeCode(StandardAnsiSqlAggregationFunctions.java:98)
at org.hibernate.dialect.function.StandardAnsiSqlAggregationFunctions$AvgFunction.render(StandardAnsiSqlAggregationFunctions.java:92)
at org.hibernate.hql.ast.SqlGenerator.endFunctionTemplate(SqlGenerator.java:214)
我尝试了很多方法来解决这个问题,使用自定义方言并在构造函数中使用 SQLFunction 将函数定义添加到 DATEDIFF 和 MAX 函数中,使用 SQL CAST 函数等......仍然无法正常工作...... 这是紧急需求,请任何人回答这个问题或将我重定向到我可以获得解决方案的链接。
【问题讨论】:
-
你使用什么数据库?哪个版本?
-
您可能会在forum.hibernate.org/viewtopic.php?p=2436442找到有用的东西
-
我使用的是 MS SQL Server 2008
-
我对 SQLServerDialect 进行了子类化,并从构造函数调用中添加了以下内容,但仍然无法正常工作。 registerFunction("datediff", new StandardSQLFunction("datediff", Hibernate.INTEGER));
-
没有找到答案,为此使用本机 SQL 执行。