使用queryDSL和mySQL:
我在time_check
表中有一个字段from
,我想将location
表中的timetrackAutoStop
作为小时添加到该字段中,然后将其与当前时间进行比较。
我们设法让queryDSL理解以下代码:
if (data.getAutostopTimeExceeded() != null) {
QLocationEntity location = QLocationEntity.locationEntity;
query.join(TIME_CHECK.location, location);
Expression<LocalDateTime> currentTimeExpr = Expressions.asDateTime(LocalDateTime.now());
TIME_CHECK.from, Expressions.asNumber(location.timetrackAutoStop));
predicates.add(
Expressions.predicate(Ops.GT,
currentTimeExpr,
Expressions.dateTimeOperation(LocalDateTime.class,
Ops.DateTimeOps.ADD_HOURS,
TIME_CHECK.from,
Expressions.asNumber(location.timetrackAutoStop)
)
)
);
}
然而,它随后生成SQL,导致mySQL数据库报告ADD_HOURS
函数不存在。
有没有办法得到我想要的东西?即所有比now()
旧的time_check_records
减去timeTrackAutoStop
?
更新:
我们尝试了以下操作,但收到一条错误消息:应为CLOSE,但找到locationEntity
:
QLocationEntity qLocationEntity = QLocationEntity.locationEntity;
query.join(TIME_CHECK.location, qLocationEntity);
Expression<LocalDateTime> currentTimeExpr = Expressions.asDateTime(LocalDateTime.now());
Expression<LocalDateTime> subExpr = Expressions.template(LocalDateTime.class,
"DATE_ADD({0}, INTERVAL {1} HOUR)",
TIME_CHECK.from,
qLocationEntity.timetrackAutoStop
);
predicates.add(Expressions.predicate(Ops.GT, currentTimeExpr, subExpr));
1条答案
按热度按时间a6b3iqyw1#
MySQL数据库没有向日期添加小时数的内置函数。但是,可以使用DATE_ADD()函数向日期添加小时间隔。此函数的语法如下:
其中date是要添加间隔的日期,expr是要添加的小时数,unit是时间单位(在本例中为“hour”)。