Как получить сущность, имеющую свойство timestamp, которое находится в течение часа, от другого свойства timestamp с помощью JPA и Hibernate

У меня есть сомнения в конструкторе критериев запроса JPA с путем или выражением.

Я хочу найти всех, кто вошел в первый пост комментарий через час после создания их аккаунта

Path<Date> accountCreatedTime = root.<Date> get("AccountCreatedTime");
Path<Date> firstPostCreatedTime = root.<Date> get("FirstPostCreatedTime");

final Predicate timeInHourPredicate = criteriaBuilder
    .greaterThanOrEqualTo(accountCreatedTime, FirstPostCreatedTime);

Пример:

  1. Учетная запись, созданная по адресу: 2018-SEP-10 в 10:00, а First Post вошла в 2018-SEP-10 в 10.15. Эта секунда должна быть получена. (Падает в час)

  2. Аккаунт, созданный по адресу: 2018-SEP-10 в 10:00, и First Post, введенный в 2018-SEP-10 в 15:00, не ДОЛЖЕН быть получен.

Есть ли способ добавить или отделить часы от пути accountCreatedTime? или мы можем получить разницу между Path accountCreatedTime и Path FirstPostCreatedTime в часах и в critBuilder

1 ответ

Использование DATEDIFF

SQL будет выглядеть так:

select u
from users u
join posts p on p.user_id = u.id
where datediff('hour', u.account_created_time, p.first_post_created_time)

Для получения более подробной информации о том, как вы можете зарегистрировать DATEDIFF функция с Criteria API, проверьте эту статью.

Другие вопросы по тегам