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

У меня есть сомнения в конструкторе критериев запроса 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 и первая запись, введенная в 2018-SEP-10 в 15:30, НЕ ДОЛЖНА извлекаться.

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

1 Ответ

0 голосов
/ 20 января 2019

Использование 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, можно узнать из этой статьи .

...