How do you enable batch inserts in hibernate?

With hibernate, when I attempt to enable batch inserts with

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

I get the following output:

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

And then this:

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

never more than batch size: 1 basically.

Am I missing a setting?

Answers


To enable batching for both INSERT and UPDATE statements, you need to sett all the following Hibernate properties:

<property name="hibernate.jdbc.batch_size">30</property>
<property name="hibernate.order_inserts">true</property>
<property name="hibernate.order_updates">true</property>
<property name="hibernate.jdbc.batch_versioned_data">true</property>

If you can use a SEQUENCE, then you should not use IDENTITY generators, since it disables batch fetching.

If you cannot use a SEQUENCE (e.g. MySQL), then try using a separate mechanism to enable batch inserts (e.g. jOOQ) instead of using the TABLE generator which does not scale and has a high-performance penalty.


Turns out what was missing in this case was:

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

ref: https://forum.hibernate.org/viewtopic.php?p=2374413, https://stackoverflow.com/a/5240930/32453 Or possibly hibernate.order_inserts.

Now I see

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

Much more frequently (anything greater than 1 basically means it's successfully doing batch inserts).

hibernate.jdbc.batch_versioned_data may also be useful.

jdbc:mysql://localhost:3306/batch?rewriteBatchedStatements=true type connection strings might also be related somehow.

https://forum.hibernate.org/viewtopic.php?p=2374413 and also see Hibernate batch size confusion


Need Your Help

Display message upon Switch button toggle

jquery checkbox twitter-bootstrap-3 bootstrap-switch

I am using Bootstrap Switch to turn my check-box in toggle switches.

What is a more elegant way in Java to read line and combine duplicate entries based on one of the fields

java readline

The following Java code reads lines from an input text file and will output the entry that has the highest number in field-2 to an output file.