2012-02-29 4 views
0

Hibernate3を使用して、次のHQLクエリを実行しようとしましたが、以下のエラーが発生しています。Agregate関数MAXとAVGがHibernate HQLのDATEDIFFと連携していません

問合せ: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

あなたは何を使用していますか?どのバージョン? –

+0

https://forum.hibernate.org/viewtopic.php?p=2436442 –

+0

私はMS SQL Server 2008を使用しています – Nagesh

答えて

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> 

厳密なタイムボックスのために私はこれ以上分析をしませんでしたが、誰かがこれを説明できるかもしれません。

関連する問題