如何验证@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
相关产品推荐
相关产品推荐

