Vypadá to, že hledáte řešení s JPQL pro provádění dotazů jako SELECT p FROM Period p WHERE datediff(p.to, p.from) > 10
.
Obávám se, že v JPQL taková funkce není, takže doporučuji použít nativní SQL. Váš nápad, jestli rozšířit Dialect o Hibernate's SQLFunctionTemplate
byl velmi chytrý. Raději bych to změnil tak, aby používal DATE_PART('day', end - start)
protože toto je způsob, jak dosáhnout rozdílu dnů mezi daty s PostgreSQL.
Můžete také definovat svou funkci v PostgreSQL a používat ji s kritérii function()
.
'CREATE OR REPLACE FUNCTION "datediff"(TIMESTAMP,TIMESTAMP) RETURNS integer AS \'DATE_PART('day', $1 - $2);\' LANGUAGE sql;'
cb.function("datediff", Integer.class, end, start);