2016-10-27 20 views
0

私はpostgresで動作するカスタムクエリを持っていますが、H2で失敗しています。H2クエリで 'ノードのデータ型がありません:org.hibernate.hql.internal.ast.tree.MethodNode'

select distinct(to_char(date_requested,'YYYY')) 
from Product 
where date_requested is not null 

私が得る例外は次のとおりです、私は別のクエリ

> Caused by: java.lang.IllegalStateException: No data type for node: org.hibernate.hql.internal.ast.tree.MethodNode 
    \-[METHOD_CALL] MethodNode: '(' 
     +-[METHOD_NAME] IdentNode: 'to_char' {originalText=to_char} 
     \-[EXPR_LIST] SqlNode: 'exprList' 
      +-[IDENT] IdentNode: 'date_requested' {originalText=date_requested} 
      \-[QUOTED_STRING] LiteralNode: ''YYYY'' 

TO_CHARの同様の使用と、うまく動作します:

select count(*), requester 
from Product 
where to_char(date_requested,'YYYY') = '2016' 
group by requester 
ORDER BY Count(*) desc 

私はH2の最新バージョンを持っています、1.4.192、to_charの使用は大丈夫です。

私はここで間違っていますか?最初のクエリがH2で動作しないのはなぜですか?

+0

無関係ですが、「distinct」は*** NOT ***の機能です。括弧の間に式を置いても、別のものは何も変わりません。 'distinct(a)'は 'distinct a'と同じです –

+0

はい、私はそれを認識しています。私が単体テストを書いているのは同僚の質問です。とにかく、はい、無関係です。編集していただきありがとうございます。 – user1825770

+0

難読化レイヤ(別名ORM)なしで実行するとクエリが機能する –

答えて

0

したがって、すべてのクエリからto_char関数を削除したときに問題が解決しました。同僚はH2は機能の使用をサポートしていないと私に伝えています。私はそれをサポートするためのドキュメントを見つけることができませんでしたが、他の誰かがこの問題に直面した場合に私はこれをオプションとして残すと考えました。

関連する問題