2016-10-27 2 views
0

Ich habe eine benutzerdefinierte Abfrage, die mit Postgres funktioniert, aber mit H2 scheitert.H2-Abfrage fehlgeschlagen mit 'Kein Datentyp für Knoten: org.hibernate.hql.internal.ast.tree.MethodNode'

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

Die Ausnahme, die ich bekommen ist:

> 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'' 

Eine weitere Abfrage I, mit ähnlicher Verwendung von to_char habe, funktioniert gut:

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

ich die neueste Version von H2 habe , 1.4.192, also weiß ich, dass die Verwendung von to_char in Ordnung ist.

Was mache ich hier falsch? Warum funktioniert die erste Abfrage nicht mit H2?

+0

Nicht verwandt, aber: 'distinct' ist *** NOT *** a-Funktion. Wenn Sie einen Ausdruck zwischen Klammern setzen, ändert sich nichts für distinct. 'distinct (a)' ist das gleiche wie 'distinct a' –

+0

Ja, ich bin mir dessen bewusst. Es ist die Frage eines Kollegen, für die ich Komponententests schreibe. Wie auch immer, ja, nicht verwandt. Danke für die Bearbeitung. – user1825770

+0

Funktioniert die Abfrage, wenn sie ohne die Verschleierungsebene (ORM) ausgeführt wird –

Antwort

0

So ging das Problem weg, wenn ich die to_char-Funktion aus all meinen Abfragen entfernt. Ein Kollege sagt mir, dass H2 die Verwendung von Funktionen nicht unterstützt. Ich konnte keine Dokumentation finden, um das gleiche zu unterstützen, aber ich dachte, ich würde das hier als eine Option lassen, falls jemand anderes mit diesem Problem konfrontiert wird.

Verwandte Themen