Можем ли мы использовать реляционный оператор со списком значений в JPQL hibernate?

#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 устанавливаются на максимум / минимум из соответствующего списка.