You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何验证@BatchSize注解限制数据库实际查询次数的效果?

测试Hibernate @BatchSize注解时查询次数不符合预期的解决方法

问题场景

在Spring Boot应用中测试Hibernate的org.hibernate.annotations.BatchSize注解对H2数据库查询的限制效果,关联OrderSummary与Item实体的代码如下:

public class OrderSummary {

// id、name 等字段...

    @OneToMany()
    @Fetch(FetchMode.SELECT)
    @BatchSize(size = 5)
    @JoinColumn(name = "SUMMARY_ID")
    List<Item> items = new ArrayList<>();

// getter、setter 方法
}

通过测试SQL脚本生成了20条Item数据,执行测试代码时发现:无论将@BatchSize的size值设为5还是10,数据库仅执行2次查询。测试代码如下:

@DataJpaTest
@ActiveProfiles("test")
class OrdersDbTest {

    @Test
    void shouldExtractItemsFromOrder() {
        OrderSummary summary = entityManager.find(OrderSummary.class, 1L);
        assertThat(summary.getItems()).hasSize(13);
    }
}

当前应用的日志配置为:

logging:
  level:
    root: WARN
    org.springframework.web: INFO
    edu.orders.service: DEBUG
    org.hibernate.SQL: DEBUG
    org.hibernate.type.descriptor.sql.BasicBinder: TRACE

且日志中未出现StatisticalLoggingSessionEventListener : Session Metrics相关内容。

解决方案

修改日志配置,开启Hibernate统计日志的打印:

logging:
  level:
    root: WARN
    org.springframework.web: INFO
    org:
      hibernate:
        SQL: DEBUG
        type.descriptor.sql.BasicBinder: TRACE
        engine.internal.StatisticalLoggingSessionEventListener: INFO

内容的提问来源于stack exchange,提问作者haoz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 04:34:51