Как лучше всего сравнить, если часть времени Date находится между двумя значениями LocalTime с querydsl? - PullRequest
1 голос
/ 28 июня 2019

QueryDSL версии 4.1.4 - в настоящий момент обновление невозможно

Как лучше всего сравнить, если часть времени Date находится между двумя значениями LocalTime с QueryDSL?

Декларация:

private java.time.LocalTime.LocalTime beginTime; -> TIME in postgresql
private java.time.LocalTime.LocalTime endTime;  -> TIME in postgresql
private java.util.Date calltime; -> TIMESTAMP in postgresql

Выражения:

TimeExpression<Date> calltimeTimePath = Expressions.asTime(qTicket.calltime);
TimePath<LocalTime> beginTimePath = qCallCenterTimeslot.beginTime;
TimePath<LocalTime> endTimePath = qCallCenterTimeslot.endTime;

Предикат:

.where(calltimeTimePath.between(beginTimePath, endTimePath));

Исключение: не удается разрешить метод 'между (com.querydsl.core.type.dsl.TimePath, com.querydsl.core.type.dsl.TimePath)'

Рабочий пример:

TimeExpression<LocalTime> testTimeExpression = Expressions.asTime(test);

.where(testTimeExpression.between(beginTimeExpression, endTimeExpression))

Так что, возможно, лучшим способом было бы преобразование TimeExpression из Date в TimeExpression из LocalTime. Но я понятия не имею, как этого добиться?


В postgresql я могу просто сделать:

SELECT t.calltime::TIME, *
FROM ticket t
     INNER JOIN call_center_timeslot c
             ON c.id=218
            AND t.calltime::TIME BETWEEN c.begin_time AND c.end_time;

Есть мысли, как лучше всего это решить?

...