2012-02-29 95 views
0

我正在使用Hibernate3,試圖執行以下HQL查詢,它會給出以下錯誤。Agregate函數MAX和AVG在Hibernate中不能與DATEDIFF一起使用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函數等,仍然不工作... 這是迫切的要求,請任何一個回答這個或重新指引我到一個鏈接,我可以得到這個解決方案。

+0

你用什麼數據庫?哪個版本? – 2012-02-29 09:39:41

+0

您可能會發現一些有用的東西在https://forum.hibernate.org/viewtopic.php?p=2436442 – 2012-02-29 09:41:07

+0

我正在使用MS SQL Server 2008 – Nagesh 2012-03-01 14:14:27

回答

1

也許這將是有益的:

當我試圖選擇一個整數最大值,我得到了同樣的錯誤。無論出於何種原因,我必須將我的值明確地轉換爲整數。

<class name="WhateverXY" table="Whatever" lazy="false" mutable="false"> 
    <id name="id" column="id" type="integer" > 
     <generator class="native"> 
      <param name="sequence">ATTACHMENT_ID_SEQUENCE</param> 
     </generator> 
    </id> 
    <version name="version" column="version" unsaved-value="negative"/> 
    <property name="paramString" column="param1" type="string" not-null="true"/> 
    <property name="paramInt" column="param2" type="integer" not-null="true"/> 
    [...] 
    <query name="WhateverXY.myQuery">from WhateverXYwhere (paramString, paramInt) in (select paramString, max(CAST(paramInt as integer)) from WhateverXY group by paramString)</query> 
</class> 

由於嚴格的時間框,我沒有做任何進一步的分析,但也許別人可以解釋這一點。

相關問題