簡體   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