SELECT p FROM Period p WHERE datediff(p.to, p.from) > 10
のようなクエリを実行するJPQLを使用したソリューションを探しているようです。 。
JPQLにはそのような機能がないので、ネイティブSQLを使用することをお勧めします。 HibernateのSQLFunctionTemplate
を使用してDialectを拡張する場合のアイデア とても賢かった。 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);