有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在hibernate中启用批插入?

在hibernate中,当我尝试使用

  <property name="jdbc.batch_size">50</property>

我得到以下输出:

 [...] cfg.SettingsFactory INFO  - JDBC batch updates for versioned data: disabled
 [...] cfg.SettingsFactory INFO  - Order SQL inserts for batching: disabled

然后这个:

 [...] jdbc.AbstractBatcher DEBUG - Executing batch size: 1

基本上不超过batch size: 1

我是不是错过了一个场景


共 (2) 个答案

  1. # 1 楼答案

    要为INSERT和UPDATE语句启用批处理,需要设置以下所有Hibernate属性:

    spring.jpa.properties.hibernate.jdbc.batch_size=30
    spring.jpa.properties.hibernate.order_inserts=true
    spring.jpa.properties.hibernate.order_updates=true
    

    如果可以使用SEQUENCE,则不应使用IDENTITY实体标识符生成器,因为它禁用批获取

    如果无法使用SEQUENCE(例如MySQL),请尝试使用单独的机制来启用批插入(例如JDBC),而不是使用TABLE生成器,该生成器不可扩展且具有高性能代价

  2. # 2 楼答案

    结果表明,在本例中缺少的是:

    <property name="order_inserts">true</property>
    

    参考:https://forum.hibernate.org/viewtopic.php?p=2374413https://stackoverflow.com/a/5240930/32453 或者可能冬眠。订单插入

    现在我明白了

     [...] cfg.SettingsFactory INFO  - Order SQL inserts for batching: enabled
     ...
     [...] Executing batch size: 2
    

    更频繁(任何大于1的值基本上意味着它成功地进行了批量插入)

    冬眠。jdbc。批处理版本的数据也可能有用

    jdbc:mysql://localhost:3306/batch?rewriteBatchedStatements=true类型连接字符串也可能以某种方式相关

    https://forum.hibernate.org/viewtopic.php?p=2374413另见 Hibernate batch size confusion