java - 您可以覆盖 SessionFactoryOptions 中设置的批量大小吗?

标签 java hibernate sessionfactory

考虑下面的代码,这是否会将为 sessionFactory 配置的batch_size覆盖为25,或者是否会因为batch_size配置与代码不匹配而出现一些冲突?

//this prints: "Config batch_size: 100"
System.out.println("Config batch_size: "+sessionFactory.getSessionFactoryOptions().getJdbcBatchSize());
int batchSize = 25;
int batchCount = 0;
Session session = sessionFactory.getCurrentSession();
for (Users user : users) {
    session.update(user);
    batchCount++;
    if (batchCount % batchSize == 0) {
        session.flush();
        session.clear();
    }
}

最佳答案

您实现的循环和 hibernate.jdbc.batch_size 在不同级别上运行。

您的循环对(您选择的)实体进行操作。但单个用户可能需要多次插入(例如,当用户有多个地址时)。 所有这些插入都通过循环方法作为(25 个插入)单个插入执行。 刷新和清除只会阻止 session 无限增长。

另一方面,hibernate.jdbc.batch_size 将捆绑(插入)相同且仅不同的语句 将参数值放入单个语句中,并带有参数集列表。 数据库处理这样的批处理语句应该更高效 然后是等效的单个语句。

它将一次发送 25 个查询(根据代码),并且 一次发送 100 个查询(根据配置)但级别不同。 我希望有道理。

关于java - 您可以覆盖 SessionFactoryOptions 中设置的批量大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54359637/

相关文章:

java - 未知实体类型异常 : Unable to locate persister (Hibernate 5. 0)

java - 无法将 Hibernate 查询结果列表转换为对象类

java - android 中关于 xml 文件的错误。找不到与给定名称 @text 匹配的资源

java - Spring Boot + Thymeleaf + 蒲公英配置不起作用

mysql - 无法建立 JDBC 连接 - 没有有效的解决方案 :/

hibernate - 在 session 中存储 Grails/GORM 域对象 - 为什么不呢?

java - JPA:为什么每个具体类实现表是可选的?

java - hibernate中的 session 和 session 工厂

java - 具有泄漏上下文的静态字段

java - java中什么情况下控件从Filter传递给Servlet?