[英]How to modify a org.springframework.data.jpa.domain.Specification object?
[英]`org.springframework.data.jpa.domain.Specification` without parsing the complex query
在我正在开发的 Spring Boot api 中,查询过滤器从客户端准备就绪,以便进入要通过存储库进行的 jpa(或者更确切地说,sql)查询的where
子句。
例如。 假设有一个Book
实体,其字段为title
、 author
、 edition
。 所有Book
-s 都将使用过滤器String
进行查询,例如
String str = "title = 'cooking' or 'recipes' and edition > 5";
这个子句可以直接输入到 where 子句中,如下所示:
select *
from book
where title = 'cooking' or 'recipes' and edition > 5 ;
问题是,如何直接从这个查询过滤器字符串创建org.springframework.data.jpa.domain.Specification
? 可以 - 可以从str
创建Specification
实例而不必以任何方式解析/处理它吗?
我会对结果进行分页。 因此,对 jpa 的EntityManager
的显式调用是行不通的。 它必须在存储库中。
TIA。
如何使用 JPA NamedQuery? 您可以在存储库接口中声明。
您的示例查询可以转换为
Page<Book> findAllByTitleInAndEditionGraterThan(List<String> titleList, int editionNo, Pageable pageable);
可以从 str 创建规范实例而不必以任何方式解析/处理它吗?
不,没有。 做这样的事情将是一个非常糟糕的主意。
从设计的角度来看,您在前端和持久层之间引入了极强的耦合。 很糟糕的主意。
从安全的角度来看,您基本上是在描述通过字符串连接组装 SQL 语句,这会打开 SQL 注入漏洞。 非常非常糟糕的主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.