Spring Criteria查询数学运算

时间:2017-11-09 06:53:43

标签: java mysql spring hibernate spring-data-jpa

我的查询如下所示。 我们有模块,我们接收用户的请求,并将其存储在report_request表中,并在收到日期时存储。我们将该请求保留在表中30天,然后再将其删除。我们有每小时运行的调度程序,检查是否有任何今天到期的请求,如果是,则从表中删除该记录。

基本上我试图在两个时间戳(current_timestamp和报告请求时间戳)之间没有任何天数。如果没有天数是30或者超过我必须删除该记录。

select round((1510184973334-1484905416098)/(24 * 60 * 60 * 1000));

我正在尝试将其转换为Predicate,因此我可以使用Spring Repository来执行此查询。

criteriaBuilder.greaterThan(criteriaBuilder.quot(criteriaBuilder.diff(System.currentTimeMillis(), join.get(Table_.endTime)), new Long(86400000)),
                                    new Long(1))

这里的criteriaBuilder.quot返回在evaluateBuilder.greaterThan方法中不可接受的Expression。

请求所有人查看此代码段并分享您的输入。如果您需要任何其他信息,请与我们联系。或者也让我知道是否有更好的方法来实现这个用例。

问候。

1 个答案:

答案 0 :(得分:0)

您可以在案例中运行本机SQL,或使用Hibernate @Formula(请参阅the example)在您的实体中引入该字段。然后可以在表达式中使用该字段。

@Formula(value = “round((now()-end_time)/(24 * 60 * 60 * 1000))”)
private int days;