Sembra che tu stia cercando una soluzione con JPQL per eseguire query come SELECT p FROM Period p WHERE datediff(p.to, p.from) > 10
.
Temo che non ci sia tale funzionalità in JPQL, quindi consiglio di utilizzare SQL nativo. La tua idea se estendere Dialect con SQLFunctionTemplate
di Hibernate era molto intelligente. Preferirei cambiarlo per usare DATE_PART('day', end - start)
poiché questo è il modo per ottenere giorni di differenza tra le date con PostgreSQL.
Potresti anche definire la tua funzione in PostgreSQL e usarla con i criteri 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);