gpt4 book ai didi

java - JPA CriteriaBuilder 日期操作

转载 作者:行者123 更新时间:2023-11-29 12:13:03 29 4
gpt4 key购买 nike

我正在尝试将我的 sql 查询转换为 JPA Criteria Builder,它在我正在处理的项目中使用并且我坚持日期操作(PostgreSQL 9.3),我在 where 子句中有一点:

...AND cl.due_date + '3 YEARS' <= '2016-01-01 10:27:16.473' and cl.due_date + '3 YEARS' >= '2008-01-01 10:27:16.473'....

问题是我无法为“due_date”+“3 YEARS”创建 Predicate 对象。有谁知道如何做到这一点?

提前致谢

最佳答案

您需要在 Java 中添加(或减去)3 年,而不是在查询中:

Calendar dueDateCalPlus3Years = Calendar.getInstance();
dueDateCalPlus3Years.set(set(year, month, date, hourOfDay, minute, second);
dueDateCalPlus3Years.add(Calendar.YEAR, -3);
Date dueDatePlus3Years = dueDateCalPlus3Years.getTime();

Expression<Date> cl; // initialize it!
Predicate predicate = criteriaBuilder.greaterThanOrEqualTo(cl, dueDatePlus3Years);

为了更简洁,可以使用区间映射CriteriaBuilder#between() ,以及您发布结果的查询:

Date date1;
Date date2;

Predicate predicate = criteriaBuilder.not(criteriaBuilder.between(cl, date1, date2));

关于java - JPA CriteriaBuilder 日期操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21378599/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com