我正在尝试将我的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年”创建Predicate对象。 有谁知道如何设法做到这一点?
提前致谢
答案 0 :(得分:2)
您需要在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));