![](/img/trans.png)
[英]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.