#java #hibernate #jpa #jpql
#java #впасть в спящий режим #jpa #jpql
Вопрос:
Моя сущность выглядит следующим образом:
@Entity
public class interval {
private Integer id;
private LocalDateTime intervalDate;
}
Я хочу написать запрос JPQL для извлечения всех интервалов, дата интервала которых больше, чем список дат, которые я передаю в запрос.
Что — то вроде этого:
SELECT i from Interval i where i.intervalDate >= :listOfDates
где listOfDates — это List<LocalDateTime> listOfDates = new ArrayList<>();
Комментарии:
1. Я бы предложил просто найти max(List<LocalDateTime> listOfDates) в коде Java и передать его в запрос
2. кроме того, у меня есть критерии, по которым я не смогу сравнивать, извлекая min / max. например, i.startTime >= :startTimeList и i.EndTime <= :endTimeList
3. Что означает «дата интервала больше, чем список дат»? После последнего из списка? После всего из списка? Или что? Или отдельно для каждого элемента списка?
4. Вы имеете в виду эквивалент SQL
intervaldate >= ANY (...)
(илиSOME
) илиintervaldate >= ALL (...)
? JPQL поддерживаетANY
/SOME
иALL
, но только с подзапросами, а не со списками.5. @MarkRotteveel Да, я хотел SQL-эквивалент
>= ANY (...)
with a list .
Ответ №1:
Вам нужно будет создать специальный запрос для каждого варианта использования. Как было предложено в комментариях, один запрос с
SELECT i from Interval i where i.intervalDate >= :listOfDatesMax
где listOfDatesMax
параметр установлен на максимум из вашего списка. И
SELECT i from Interval i where i.startTime >= :startTimeListMax And i.endTime <= :endTimeListMin
где снова параметры startTimeListMax
и endTimeListMin
устанавливаются на максимум / минимум из соответствующего списка.