1

对于 Hibernate 中的 N+1 查询问题,我添加@BatchSize(size=20)了集合和类级别。它运行得非常好,因为它每次获取 20 条记录。现在我发现有一个hibernate.jdbc.fetch_size配置选项,我认为它与@BatchSize注释相同。但是,当我在项目中配置它时,它对 N+1 查询问题没有影响。

我错了hibernate.jdbc.fetch_size吗?是hibernate.jdbc.fetch_size为了什么?

4

1 回答 1

4

hibernate.jdbc.fetch_size是一个JDBC 驱动程序配置,它确定:

当 select 语句的结果超过一行时提取的行数

Hibernate 使用此配置来设置PreparedStatement.fetchSize并根据 JDBC 文档:

当此语句生成的 ResultSet 对象需要更多行时,向 JDBC 驱动程序提供有关应从数据库中获取的行数的提示。如果指定的值为零,则忽略提示。默认值为零。

所以这个设置只是一个提示,它允许 JDBC Driver 批量检索选定的行,以最大限度地减少数据库网络往返的次数。

@BatchSize是一个Hibernate 获取优化,它控制正在生成的 SELECT 语句的数量。

于 2015-02-27T09:46:14.130 回答