Det verkar som att du letar efter en lösning med JPQL för att utföra frågor som SELECT p FROM Period p WHERE datediff(p.to, p.from) > 10
.
Jag är rädd att det inte finns någon sådan funktionalitet i JPQL så jag rekommenderar att du använder inbyggd SQL. Din idé om att utöka Dialect med Hibernates SQLFunctionTemplate
var väldigt smart. Jag skulle hellre ändra det till att använda DATE_PART('day', end - start)
eftersom detta är sättet att uppnå dagars skillnad mellan datum med PostgreSQL.
Du kan också definiera din funktion i PostgreSQL och använda den med kriteriet 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);