我有一个使用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)
所以,我的问题如下:
答案 0 :(得分:14)
看起来像meta.getDefaultTransactionIsolation()); 在mysql驱动程序
中实现DatabaseMetaData时是硬编码的公共类DatabaseMetaData实现java.sql.DatabaseMetaData 线...
1475 public int getDefaultTransactionIsolation() throws java.sql.SQLException JavaDoc { 1476 if (this.conn.supportsIsolationLevel()) { 1477 return java.sql.Connection.TRANSACTION_READ_COMMITTED; 1478 } else { 1479 return java.sql.Connection.TRANSACTION_NONE; 1480 } 1481 }
所以我敢打赌并信任getSession()。connection()。getTransactionIsolation()