当我运行此查询时,我遇到了 n+1 问题,其中数据 JDBC 获取事件对象的所有相关实体。有没有办法使用数据JDBC来避免这种情况?
@Query(
"""
SELECT campaign.*
FROM campaign
JOIN targeting ON campaign.targeting_id = targeting.id
WHERE (
CASE
WHEN campaign.applications_close_date IS NOT NULL
THEN NOW() BETWEEN campaign.start_date AND campaign.applications_close_date
WHEN campaign.end_date IS NOT NULL
THEN NOW() BETWEEN campaign.start_date AND campaign.end_date
ELSE NOW() >= campaign.start_date
END
)
AND NOT EXISTS
(
SELECT *
FROM application
WHERE application.campaign = campaign.id
AND application.influencer = :influencerId
)
"""
)
fun findAllMatchingByInfluencerId(
influencerId: Long,
country: String?
): List<Campaign>
最佳答案
是的你可以。
如果不需要引用的实体,则应使用没有这些属性作为返回值的类。
如果你真的想要那些被引用的实体,但有一个更有效的方法来构造带有它的引用的实体,你可以指定你自己的 ResultSetExtractor
或 RowMapper
在 @Query
注解。
关于spring - spring 数据 jdbc 有没有办法避免 n+1 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65718574/