Es sieht so aus, als ob Sie nach einer Lösung mit JPQL suchen, um Abfragen wie SELECT p FROM Period p WHERE datediff(p.to, p.from) > 10
auszuführen .
Ich fürchte, es gibt keine solche Funktionalität in JPQL, daher empfehle ich die Verwendung von nativem SQL. Ihre Idee zur Erweiterung von Dialect mit SQLFunctionTemplate
von Hibernate war sehr schlau. Ich würde es lieber so ändern, dass es DATE_PART('day', end - start)
verwendet da dies der Weg ist, um mit PostgreSQL Tage Unterschied zwischen Datumsangaben zu erreichen.
Sie können Ihre Funktion auch in PostgreSQL definieren und sie mit den Kriterien function()
verwenden .
'CREATE OR REPLACE FUNCTION "datediff"(TIMESTAMP,TIMESTAMP) RETURNS integer AS \'DATE_PART('day', $1 - $2);\' LANGUAGE sql;'
cb.function("datediff", Integer.class, end, start);