Wygląda na to, że szukasz rozwiązania z JPQL do wykonywania zapytań typu SELECT p FROM Period p WHERE datediff(p.to, p.from) > 10
.
Obawiam się, że w JPQL nie ma takiej funkcjonalności, więc polecam używać natywnego SQL. Twój pomysł na rozszerzenie programu Dialect o SQLFunctionTemplate
Hibernate był bardzo sprytny. Wolałbym to zmienić, aby użyć DATE_PART('day', end - start)
ponieważ jest to sposób na osiągnięcie różnicy dni między datami w PostgreSQL.
Możesz także zdefiniować swoją funkcję w PostgreSQL i używać jej z kryteriami 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);