首页 > 解决方案 > 是否可以在 Spring Data Rest 中使用和组合 WHERE 子句?

问题描述

我正在使用 Spring Boot、Spring Data 编写应用程序。我正在尝试根据不同的过滤器参数实现过滤功能。

我发现了开箱即用的 Spring Data REST 框架,它支持基本的过滤操作,例如:

/myEntities?field1=value1&field2=value2&sort=field2,desc&size=10&page=2

在这种情况下,我们只过滤 2 个字段,没有任何额外的 where 子句。

但是,如果我需要一个更复杂的过滤器,它对我的​​实体具有不同数量的 where 子句、顺序、限制,该怎么办?结果查询可能如下所示:

SELECT * FROM table
WHERE field1 != `value1` and (field1 != ` value2 `OR (field1 = `value3` AND filed2 < 3))
AND field2 != 99

是否可以使用 Spring Data Rest 的内置功能(将所有这些东西作为 http 参数发送)来实现不同 where 子句的组合?

标签: javaspringhibernatespring-data-jpaspring-data-rest

解决方案


您应该能够自定义您的存储库以使用包含所有必需参数的搜索方法。然后,它们将在搜索资源下与所有查询参数一起暴露给 Spring Data Rest。

就像是:

@RestResource(path = "weirdFilter", rel = "weirdFilter")
@Query(value = "SELECT * FROM table
WHERE field1 != :value1 and (field1 != :value2 OR (field1 = :value3 AND field2 < 3))
AND field2 != 99")
public Page<Stuff> findByWeirdFilter(@Param("value1") String value1, @Param("value2") String value2, @Param("value3") String value3, Pageable p);

推荐阅读