Я имею следующую функцию в одном из своих хранилищ:Spring Data (REST) и @Query: необязательный список, как пары
@RestResource(path = "filter", rel = "filter")
@Query("SELECT t "
+ "FROM Trip t "
+ "WHERE "
+ "(:from IS NULL OR t.startTs >= :from) "
+ "AND (:categories IS NULL OR t.category IN :categories) ")
Page<Trip> filter(
@Param("from") Instant from,
@Param("categories") List<Category> categories,
Pageable pageable);
Category
это перечисление, которое хранится в
@Enumerated(EnumType.STRING)
в таблице Trips
.
Когда я выполняю свой запрос HTTP только с одной категорией, я получаю правильные результаты. Такое же поведение при выполнении запроса без ключа категории.
htt*://localhost/filter?categories=PRIVATE
==> нормально
htt*://localhost/filter
==> нормально
При использовании более одной категории:
htt*://localhost/filter?categories=PRIVATE,BUSINESS
Я получаю следующее исключение:
org.hibernate.hql.internal.ast.QuerySyntaxException: неожиданный АСТ node: {vector} [select count (t) FROM foo.bar.services.trips.model.Trip t WHERE (: from IS NULL ИЛИ t.startTs> =: from) AND (: categories_0_, : categories_1_ IS NULL ИЛИ t.category IN (: categories_0_, : categories_1_))]
Кто-нибудь имеет представление о том, что я делаю неправильно здесь?
Пробовал оба, но не работал. Но ты указал мне в правильном направлении. Это то, что в конечном итоге работает: AND ((: categories) IS NULL OR (t.category IN (: categories)). Thx! – StephanM
Отлично! –