hibernate.jdbc.fetch_size和批量提取策略@BatchSize之间的区别

时间:2015-02-27 03:56:09

标签: java hibernate orm configuration batch-fetching

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

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

1 个答案:

答案 0 :(得分:1)

hibernate.jdbc.fetch_sizeJDBC driver configuration,它决定:

  

当结果多于一行时获取的行数   选择陈述

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

  

给JDBC驱动程序一个关于应该是多少行的提示   当ResultSet需要更多行时从数据库中获取   本声明产生的对象。如果指定的值为零,   然后忽略提示。默认值为零。

因此,此设置只是一个提示,它允许JDBC驱动程序批量检索所选行,以最大限度地减少数据库网络往返次数。

@BatchSizeHibernate fetching优化,它控制着生成的SELECT语句的数量。