我有以下@Query,它工作得很好。但现在我有一个场景,屏幕需要一个过滤器,它将向查询添加一些 where 子句。
@Query
("
SELECT
ef, ed, ea
FROM EntityA ea
JOIN EntityB eb
JOIN EntityC ec
JOIN EntityD ed
JOIN EntityE ee
JOIN EntityF ef
WHERE
TRUNC(ee.date) = TRUNC(:date)
-- conditions based on screen filter parameters
AND ef.amount = :amount
AND LOWER(ec.name) LIKE LOWER('%' || :name || '%')
AND ec.projectId = :projectId
AND ed.divisionId = :divisionId
")
发现有一个不错的Specifications支持根据要求动态创建查询。
但不确定如何使用 Specifications 一次性选择多个对象 ef、ed 和 ea ,否则我必须再编写 4 个查询才能根据过滤条件返回结果。
注意出于性能原因,不使用预先加载,因为实体由多个服务使用。
最佳答案
规范仅用于动态创建 where 子句。
如果您还需要控制 select 子句,我建议使用 JPA Criteria API里面 custom method您的存储库的。
关于spring-data-jpa - 如何使用规范在spring data jpa中选择多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58120018/