当我运行这个查询时,我遇到了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>
1条答案
按热度按时间vaj7vani1#
是的,你可以。
如果不需要引用的实体,则应使用不具有这些属性的类作为返回值。
如果您确实需要这些被引用的实体,但是有一种更有效的方法来使用其引用构造实体,那么您可以指定自己的引用
ResultSetExtractor
或者RowMapper
在@Query
注解。