我有一個復雜的SQL查詢,我想在我的Spring boot應用程式中執行。以下是它的JPQL等價物的一部分:
SELECT j FROM Job j WHERE
(?6 = 0L) or
0L IN (SELECT i12.filterFieldId FROM IjpPublishFilterFields i12 WHERE i12. jobId = j.id AND i12.fieldType LIKE 'GRADE') 或者 'GRADE'
(?6 IN (SELECT節點.id FROM Grade node
INNER JOIN Grade parent ON ((node. lft BETWEEN parent.lft AND parent.rgt) AND
parent.id IN (SELECT i1. filterFieldId FROM IjpPublishFilterFields i1 WHERE **j. id** = i1. jobId AND i1.fieldType LIKE 'GRADE') )
WHERE node.organizationId = ?5 AND?
node.isActive = true AND
parent.isActive = true ))
由于有多個其他條件需要動態形成'Where'子句,我相信@Query注釋是不適用的。
經過大量的研究,我仍然無法將這個where子句轉換為規范。
例如,我可以回傳整個IjpPublishFilterFields物件,但不能只回傳i12.filterFieldId。
我如何使用JPA規范撰寫where子句呢?
uj5u.com熱心網友回復:
我能夠通過使用EnitityManager.createQuery()來解決這個問題,并使用簡單的字串連接形成這個等價的JPGL。但我相信,我們應該能夠使用Spring資料JPA Specifications形成這個where口徑。因此,我們歡迎進一步的提示。
uj5u.com熱心網友回復:
你的查詢沒有什么特別之處,所以你應該能夠把它翻譯成類似于criteriaBuilder.or( criteriaBuilder.eq(param, 0L), criteriaBuilder.literal(0L).in(subquery1), param.in(subquery2) ),其中subquery1和subquery2大致是這樣構造。subquery<Long> subquery1 = criteriaQuery.subquery(Long.class); Root<IjpPublishFilterFields> r = subquery1.from(IjpPublishFilterFields.class); subquery1.select(r.get("filterFieldId") ); .../code>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/327146.html
標籤:
