有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案