spring数据jdbc有没有办法避免n+1问题?

wgx48brx  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(355)

当我运行这个查询时,我遇到了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>
vaj7vani

vaj7vani1#

是的,你可以。
如果不需要引用的实体,则应使用不具有这些属性的类作为返回值。
如果您确实需要这些被引用的实体,但是有一种更有效的方法来使用其引用构造实体,那么您可以指定自己的引用 ResultSetExtractor 或者 RowMapper@Query 注解。

相关问题