Có vẻ như bạn đang tìm kiếm giải pháp với JPQL để thực hiện các truy vấn như SELECT p FROM Period p WHERE datediff(p.to, p.from) > 10
.
Tôi e rằng không có chức năng như vậy trong JPQL vì vậy tôi khuyên bạn nên sử dụng SQL gốc. Ý tưởng của bạn nếu mở rộng Dialect với SQLFunctionTemplate
của Hibernate rất thông minh. Tôi muốn thay đổi nó để sử dụng DATE_PART('day', end - start)
vì đây là cách để đạt được sự khác biệt giữa các ngày với PostgreSQL.
Bạn cũng có thể xác định hàm của mình trong PostgreSQL và sử dụng nó với tiêu chí 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);