Изглежда, че търсите решение с JPQL за изпълнение на заявки като SELECT p FROM Period p WHERE datediff(p.to, p.from) > 10
.
Опасявам се, че няма такава функционалност в JPQL, така че препоръчвам да използвате роден SQL. Вашата идея, ако разширите Dialect с SQLFunctionTemplate
на Hibernate беше много умен. Предпочитам да го променя да използва DATE_PART('day', end - start)
тъй като това е начинът да се постигне разлика в дните между датите с PostgreSQL.
Можете също да дефинирате функцията си в PostgreSQL и да я използвате с критерии 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);