【发布时间】:2019-10-26 03:05:06
【问题描述】:
我正在尝试通过休眠将新实体批量保存或更新到 mysql 数据库。我将一个 transaction.begin 和一个 transaction.commit 放在一个循环周围,该循环执行实体生成并将其传递给 session.saveorUpdate。然而,在每一次通过时,hibernate 都会连接到 DB,而不是在我调用 transaction.commit() 时最后提交。在检查日志时,休眠输出:将提交连接“本地事务”并将连接设置为自动提交模式
到目前为止,我有,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.
【问题讨论】:
标签: java hibernate jdbc transactions autocommit