Я пытаюсь выполнить пакетное сохранение или обновление новых объектов в базе данных MySQL через Hibernate. Я помещаю транзакции.begin и транзакции.commit вокруг цикла, который выполняет генерацию сущности и передает ее в session.saveorUpdate. Однако на каждом проходе hibernate подключается к БД, а не фиксирует в конце, когда я вызываю транзакции. При проверке журналов выводятся из спящего режима: соединение 'локальная транзакция' будет зафиксировано, и соединение будет установлено в режим автоматической фиксации
Пока у меня есть, 1) попытался добавить disabledLocalTxn в true для URL соединения, но безрезультатно,
2) для свойства autocommit установлено значение false, но не имеет конечного эффекта
Спящие свойства:
<property name="hibernate.connection.url">jdbc:mysql://url:port/Dbname?disableLocalTxn=true</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.hbm2ddl.auto">validate</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.jdbc.batch_size">50</property>
<property name="hibernate.order_inserts">true</property>
<property name="hibernate.connection.autocommit">false</property>
<property name="hibernate.hbm2ddl.jdbc_metadata_extraction_strategy">individually</property>
<mapping class="Object1"/>
<mapping class="Object2"/>
код:
tx = session.getTransaction()
tx.begin();
for(i in elements){
session.saveOrUpdate(generateObject1(i));// - Hibernate queries here
}
tx.commit;// - instead of all at end
Вывод журнала ниже, в последней строке указано, что соединение будет установлено на автоматическую фиксацию
Jun 11, 2019 9:26:06 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
Jun 11, 2019 9:26:06 PM org.hibernate.engine.jdbc.connections.internal.PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
Jun 11, 2019 9:26:12 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
Jun 11, 2019 9:26:13 PM org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl useContextualLobCreation
INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
Jun 11, 2019 9:26:27 PM org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@2257fadf] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.