2011-01-05 5 views
2

ich die Syntax für datediff in mysql ein Problem, dass haben unterscheidet sich von dem in hsqldb:Hibernate Dialects + datediff Funktion

mysql: datediff(date1,date2) 
hsqldb: datediff(interval,date1,date2) 

Die Dialekte in Hibernate in der Regel diese Probleme beheben, aber ich scheine nicht zu in der Lage sein, eine Möglichkeit zu finden, eine dediff-Beschränkung für den Ruhezustand zu erstellen. Dies ist ein echtes Ärgernis, da es mich daran hindert, Unit-Tests mit einer In-Memory-HSQL-Datenbank durchzuführen, da ich das Format von datediff in einer SQL-Anweisung "fest codieren" muss.

Wenn jemand in dieser Angelegenheit einen Rat hat, würde es sehr geschätzt werden.

Antwort

4

Ich würde sagen, dass die einfachste Lösung ist, einen eigenen benutzerdefinierten HSQLDB-Dialekt zu erstellen, der den bestehenden HSQLDB-Dialekt erweitert. Registrieren Sie dann im Konstruktor eine Funktion für die Verarbeitung von datediff (date1, date2), die in datediff (interval, date1, date2) übersetzt werden soll, sofern das Intervall ein statischer Wert wäre. Etwas wie dieses:

registerFunction("datediff", new SQLFunctionTemplate(StandardBasicTypes.INTEGER, "datediff(interval, ?1, ?2)"));