gpt4 book ai didi

java - Hibernate 忽略自动提交错误设置。创建本地连接

转载 作者:太空宇宙 更新时间:2023-11-04 09:35:44 24 4
gpt4 key购买 nike

我正在尝试通过 hibernate 将新实体批量保存或更新到 mysql 数据库。我将 transaction.begin 和 transaction.commit 放在一个循环中,该循环执行实体生成并将其传递给 session.saveorUpdate。然而,在每次传递时,hibernate都会连接到数据库,而不是在我调用 transaction.commit() 时最后提交。在检查日志时, hibernate 输出:连接“本地事务”将被提交,连接将设置为自动提交模式

到目前为止,我已经,1)尝试将disabledLocalTxn添加到连接url中,但没有效果,2)已将自动提交设置为 false 属性但没有最终效果

hibernate 属性:

<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.

最佳答案

结束这一切,以防有人以某种方式到达这里。

当 ddl 语句设置为更新时,需要自动提交。所以只有 ddl 语句在自动提交真实模式下运行

但是,当您通过 session.beginTransaction 和 tx.commit 进行手动事务处理时,它会像在自动提交错误模式下一样运行。

所以一切都很好。当它为 hibernate 的 saveOrUpdate() 选择数据库时,由于额外的查询而出现一些困惑

关于java - Hibernate 忽略自动提交错误设置。创建本地连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56547980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com