gpt4 book ai didi

hibernate - 如果没有显式设置,hibernate 使用的默认隔离级别是什么?

转载 作者:行者123 更新时间:2023-12-03 10:43:15 25 4
gpt4 key购买 nike

我有一个使用 hibernate 版本 3.6.4 和 c3p0 版本 0.9.1.2 进行连接池的应用程序。我的底层 RDBMS 是 MySql 版本 5.0.67。

我的MySql安装表明默认事务隔离级别是“REPEATABLE-READ”(4):

mysql> select @@GLOBAL.tx_isolation, @@tx_isolation;
+-----------------------+-----------------+
| @@GLOBAL.tx_isolation | @@tx_isolation |
+-----------------------+-----------------+
| REPEATABLE-READ | REPEATABLE-READ |
+-----------------------+-----------------+

我没有在 hibernate.cfg.xml 或我的应用程序中的任何地方更改或配置事务隔离级别。在应用程序中,我使用以下代码打印配置:
DatabaseMetaData meta = getSession().connection().getMetaData();
System.out.println("Default Tx Isolation: " + meta.getDefaultTransactionIsolation());
System.out.println("Current Tx Isolation: " + getSession().connection().getTransactionIsolation());

我得到以下结果:
Default Tx Isolation: 2 (=READ_COMMITTED)
Current Tx Isolation: 4 (=REPEATABLE_READ)

所以,我的问题如下:
  • “2”值从何而来?既然默认是 REPEATABLE_READ,为什么 getDefaultTransactionIsolation() 返回 READ_COMMITTED?
  • hibernate到底使用了什么隔离级别? REPEATABLE_READ 还是 READ_COMMITTED?
  • 我认为当没有设置隔离级别时,hibernate应该使用底层数据库的默认值。这是真的?也许 jbdc 驱动程序实现自己设置了一个默认值,而 hibernate 使用它?
  • 最佳答案

    看起来像 meta.getDefaultTransactionIsolation());
    在 mysql 驱动程序中的 DatabaseMetaData 实现中被硬编码

    公共(public)类 DatabaseMetaData 实现 java.sql.DatabaseMetaData
    线条……

    1475 public int getDefaultTransactionIsolation() 抛出 java.sql.SQLException JavaDoc {
    第1476章
    第1477章
    第1478章
    第1479章
    第1480章
    第1481章

    所以我敢打赌并相信 getSession().connection().getTransactionIsolation()

    关于hibernate - 如果没有显式设置,hibernate 使用的默认隔离级别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6484332/

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