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

标签 spring spring-data-jdbc

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

最佳答案

是的你可以。
如果不需要引用的实体,则应使用没有这些属性作为返回值的类。
如果你真的想要那些被引用的实体,但有一个更有效的方法来构造带有它的引用的实体,你可以指定你自己的 ResultSetExtractorRowMapper@Query注解。

关于spring - spring 数据 jdbc 有没有办法避免 n+1 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65718574/

相关文章:

java - 使用 Spring XML 配置实现观察者模式?

java - 您如何在 spring-security 中注销所有已登录的用户?

java - 如何在 Java 中将多个 Map/List/Array 从 API url 传递到 RestController?

java - spring-data-jdbc 更新存储库保存方法更新 ID

java - Set的映射需要Id吗?

java - Spring Data JDBC是否支持自定义类型转换器

postgresql - 如何使用 spring-data-jdbc 读/写 postgres jsonb 类型?

java - 带有嵌套事务的 Spring JpaTransactionManager

java - 在 SpringBoot 2.0.1.RELEASE 应用程序中读取文件

postgresql - 不接受嵌入对象的空值