Det ser ud til, at du leder efter en løsning med JPQL til at udføre forespørgsler som SELECT p FROM Period p WHERE datediff(p.to, p.from) > 10
.
Jeg er bange for, at der ikke er en sådan funktionalitet i JPQL, så jeg anbefaler at bruge native SQL. Din idé om at udvide Dialect med Hibernates SQLFunctionTemplate
var meget klog. Jeg vil hellere ændre det til at bruge DATE_PART('day', end - start)
da dette er måden at opnå dages forskel mellem datoer med PostgreSQL.
Du kan også definere din funktion i PostgreSQL og bruge den med kriterierne 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);