Spring

스프링 데이터 jdbc가 n + 1 문제를 피할 수있는 방법이 있습니까?

기록만이살길 2021. 3. 11. 09:04
반응형

스프링 데이터 jdbc가 n + 1 문제를 피할 수있는 방법이 있습니까?

1. 질문(문제점):

이 쿼리를 실행할 때 데이터 JDBC가 캠페인 개체의 모든 관련 항목을 가져 오는 n + 1 문제가 발생합니다. 데이터 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>

2. 해결방안:

그래 넌 할수있어.

참조 된 엔터티가 필요하지 않은 경우 해당 속성이없는 클래스를 반환 값으로 사용해야합니다.

실제로 참조 된 엔티티를 원하지만 해당 참조로 엔티티를 구성하는 더 효율적인 방법이 있는 경우 고유 ResultSetExtractor하거나 어노테이션 RowMapper에서 지정할 수 있습니다 @Query.

65718574
반응형