0

我对带有路径或表达式的 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 点,First Post 输入 2018-SEP-10 上午 10.15 应获取此信息。(一小时内下降)

  2. 帐户创建于:2018 年 9 月 10 日上午 10 点,第一篇帖子于 2018 年 9 月 10 日下午 3.50 输入,不应获取此信息。

有什么方法可以从 Path accountCreatedTime 添加或分离小时数?或者我们可以在小时和标准构建器中获得路径 accountCreatedTime 和路径 FirstPostCreatedTime 之间的差异

4

1 回答 1

0

使用 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 注册函数的更多详细信息,请查看这篇文章

于 2019-01-20T14:05:26.613 回答