要求
E.g。 resourceA.attribute1 =" CAT" AND resourceA.subResourceB.attribute2> = 42 AND resourceA.attribute3 IN(" WHIZ"," BANG")
我调查了四个解决方案 - 每个解决方案都越来越接近目标了。是否有其他解决方案我还没有找到或者没有开箱即用的完整解决方案 - 是使用RSQL" REST查询语言构建的答案。概述如下?
1)spring-data-rest queries
Spring数据中有很多支持在代码中开发复杂查询,但是这需要开发人员事先知道查询的结构并相应地构造代码。 https://docs.spring.io/spring-data/rest/docs/current/reference/html/#repository-resources.query-method-resource
2)spring-data,spring-data-rest,query-dsl
http://www.baeldung.com/rest-api-search-querydsl-web-in-spring-data-jpa
+ ve非常适合 - 完全有能力的解决方案,几乎零编码开箱即用
可以构建深层嵌套查询,服务器可以动态生成正确的SQL。
-ve唯一的操作符是EQUALS' ='为了应用其他运算符,您需要实现QuerydslBinderCustomizer实例,这些实例再次要求服务器代码提前了解查询的复杂性。
3)Baeldung - "构建休息查询语言"
http://www.baeldung.com/spring-rest-api-query-search-language-tutorial
+ ve - 越来越接近通用查询语言
-ve - 感觉就像一个演示/ POC
4)使用RSQL的REST查询语言
http://www.baeldung.com/rest-api-search-language-rsql-fiql
+ ve - 感觉就像一个更完整的查询语言&关联的解析器
-ve - 不确定弹簧整合
答案 0 :(得分:0)
JPA没有通用的REST查询语言。您确定的内容似乎已经存在,但是对querydsl和rsql的近期活动较少,建议您在采用它们时应格外小心。您很可能需要通过分叉项目来自己支持其他更改,尤其是从现在开始的5年之内,当确定作者已转而从事其他工作时。
其他一些有趣的链接:
5)使用注释动态构建查询