我的一个存储库中具有以下功能:

@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:意外的AST
  节点:{vector} [从foo.bar.services.trips.model.Trip中选择count(t)
  t WHERE(:from IS NULL或t.startTs> =:from)AND(:categories_0_,
  :categories_1_是NULL或t.category IN(:categories_0_,
  :categories_1_))


有人知道我在做什么错吗?

最佳答案

请尝试以下方法之一:

1)尝试将涉及列表的语句括在括号中:

@Query("SELECT t "
        + "FROM Trip t "
        + "WHERE "
        + "(:from IS NULL OR t.startTs >= :from) "
        + "AND ((:categories IS NULL) OR (t.category IN :categories)) ")


2)在此处用括号括住:类别

t.category IN (:categories)

09-26 14:08