java QueryDSL查找在一天中的某个时间发生的多天事件
我在Spring中有一个使用QueryDSL的Java应用程序。到目前为止,我发现它非常棒,并编写了一些非常复杂的查询,而且非常容易理解。然而,我遇到了一个问题,从树上看不到木头
基本上,我需要在一个月的每天下午3:30到6:30之间找到报告。在MySQL中,这很简单:
select * from Report where datetime >= "2021-01-01 00:00:00" and datetime <= "2021-01-31 23:59:59" and time(datetime) between "15:30" and "18:30" ;
这是我在QueryDSL工作时遇到的问题
我看到我的查询对象是DateTimePath<Date>
的一个实例,似乎有几个有用的子方法可以调用hour()
、minute()
等,但time()
没有
我尝试在BooleanExpression
中创建TimeExpression
:
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date d1 = null;
Date d2 = null;
try {
d1 = sdf.parse("15:30");
d2 = sdf.parse("18:30");
} catch(Exception ex) {
}
TimeExpression<Date> te1 = Expressions.asTime(d1);
TimeExpression<Date> te2 = Expressions.asTime(d2);
BooleanExpression bexp1 = qReport.datetime.between(te1, te2);
然后用我的主要问题来总结:
// Date dStart and dEnd are 1st Jan 2021 and 31st Jan 2021 respectively
QReport qReport = QReport.report;
BooleanExpression beFrom = qReport.datetime.goe(dStart);
BooleanExpression beTo = qReport.datetime.loe(dEnd);
BooleanBuilder bbHoursBetween = new BooleanBuilder();
// code from previous snippet follows here...
。。。没有运气。我可以看到里面有时间模板和其他东西,我看过Java API,但就是想不出来!我觉得很尴尬,因为我写了一些很棒的问题,比这复杂得多。。。在如何使用这个问题上,我无法弥合思想上的鸿沟
能不能请更有经验的查询者帮我一下?到目前为止,我已经花了一天多的时间在这个问题上,并且认为我对可能是一个非常简单的解决方案的代码视而不见
提前谢谢
共 (0) 个答案