如何使用JPA和Hibernate获取具有与其他timestamp属性相距一小时之内的timestamp属性的实体

时间:2019-01-20 03:18:59

标签: hibernate jpa spring-data-jpa jpa-2.1 hibernate-jpa

我对带有路径或表达式的JPA查询条件构建器有疑问。

我想查找在创建帐户后的一个小时内所有输入了第一条评论的人

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

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

示例:

  1. 帐户创建时间:2018年9月10日上午10点,First Post于2018年10月15日进入2018年9月10日。 (几小时内摔倒)

  2. 帐户创建时间:2018年9月10日上午10点,First Post在3.50 pm进入2018年9月10日。不应获取此帐户。

是否可以通过Path accountCreatedTime添加或分离小时数?还是可以获取小时数和criteriaBuilder中的Path accountCreatedTime和Path FirstPostCreatedTime之间的差异

1 个答案:

答案 0 :(得分: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)

有关如何使用Criteria API注册DATEDIFF函数的更多详细信息,请查看this article