Spring Data(REST)& @Query:可选列表作为参数

时间:2017-02-14 12:12:36

标签: java spring jpa spring-data spring-data-rest

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

@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 ==&gt;确定

htt*://localhost/filter ==&gt;确定

使用多个类别时:

htt*://localhost/filter?categories=PRIVATE,BUSINESS

我遇到以下异常:

  

org.hibernate.hql.internal.ast.QuerySyntaxException:意外的AST   node:{vector} [select count(t)FROM foo.bar.services.trips.model.Trip   t WHERE(:来自IS NULL或t.startTs&gt; =:from)AND(:categories_0_,   :categories_1_ IS NULL或t.category IN(:categories_0_,   :categories_1_))]

任何人都知道我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

请尝试以下方法之一:

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)