繁体   English   中英

`org.springframework.data.jpa.domain.Specification` 不解析复杂查询

[英]`org.springframework.data.jpa.domain.Specification` without parsing the complex query

在我正在开发的 Spring Boot api 中,查询过滤器从客户端准备就绪,以便进入要通过存储库进行的 jpa(或者更确切地说,sql)查询的where子句。

例如。 假设有一个Book实体,其字段为titleauthoredition 所有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);

检查此链接,有关 JPA 命名查询的说明

可以从 str 创建规范实例而不必以任何方式解析/处理它吗?

不,没有。 做这样的事情将是一个非常糟糕的主意。

  1. 从设计的角度来看,您在前端和持久层之间引入了极强的耦合。 很糟糕的主意。

  2. 从安全的角度来看,您基本上是在描述通过字符串连接组装 SQL 语句,这会打开 SQL 注入漏洞。 非常非常糟糕的主意。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM