对于Hibernate中的N + 1查询问题,我在集合和类级别添加@BatchSize(size=20)
。它运行得非常好,因为它每次都能获取20条记录。
现在我发现有一个hibernate.jdbc.fetch_size
配置选项,我认为它与@BatchSize
注释相同。
但是,当我在项目中配置它时,它对N + 1查询问题没有影响。
我错了hibernate.jdbc.fetch_size
?
什么是hibernate.jdbc.fetch_size
?
答案 0 :(得分:1)
hibernate.jdbc.fetch_size
是JDBC driver configuration,它决定:
当结果多于一行时获取的行数 选择陈述
Hibernate使用此配置来设置PreparedStatement.fetchSize并根据JDBC文档:
给JDBC驱动程序一个关于应该是多少行的提示 当ResultSet需要更多行时从数据库中获取 本声明产生的对象。如果指定的值为零, 然后忽略提示。默认值为零。
因此,此设置只是一个提示,它允许JDBC驱动程序批量检索所选行,以最大限度地减少数据库网络往返次数。
@BatchSize
是Hibernate fetching优化,它控制着生成的SELECT语句的数量。