Parece que você está procurando uma solução com JPQL para realizar consultas como
SELECT p FROM Period p WHERE datediff(p.to, p.from) > 10
. Receio que não exista essa funcionalidade no JPQL, por isso recomendo usar SQL nativo. Sua ideia se estender o Dialect com o
SQLFunctionTemplate
do Hibernate foi muito inteligente. Prefiro alterá-lo para usar DATE_PART('day', end - start)
pois esta é a maneira de obter a diferença de dias entre as datas com o PostgreSQL. Você também pode definir sua função no PostgreSQL e usá-la com critérios
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);