Dialetos de hibernação + função datediff
Pergunta
Eu tenho um problema, pois a sintaxe do Datediff em MySQL é diferente daquele no HSQLDB:
mysql: datediff(date1,date2)
hsqldb: datediff(interval,date1,date2)
Os dialetos no hibernato geralmente resolvem esses problemas, no entanto, não pareço encontrar uma maneira de criar uma restrição de datatediff para o hibernado. Este é um incômodo real, porque me impede de testar com um banco de dados HSQL na memória, pois tenho que 'codificar' o formato do datediff em uma instrução SQL.
Se alguém tiver conselhos sobre esse assunto, seria muito apreciado.
Solução
Eu diria que a solução mais fácil é criar seu próprio dialeto HSQLDB personalizado, estendendo o dialeto HSQLDB existente. Em seguida, no construtor, registre uma função para lidar com o datediff (date1, date2) a ser traduzido em datediff (intervalo, date1, date2), desde que esse intervalo seja um valor estático. Algo assim:
registerFunction( "datediff", new SQLFunctionTemplate( StandardBasicTypes.INTEGER, "datediff(interval, ?1, ?2)" ) );