接続プールに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)
だから、私の質問は次のとおりです:
meta.getDefaultTransactionIsolation());のようになります。 mysqlドライバーのDatabaseMetaDataの実装にハードコーディングされている
パブリッククラスDatabaseMetaDataは、Java.sql.DatabaseMetaData行を実装します。
1475 public int getDefaultTransactionIsolation()はJava.sql.SQLException JavaDoc { 1476 if(this.conn.supportsIsolationLevel()){ 1477がJavaを返すsql.Connection.TRANSACTION_READ_COMMITTED; 1478} else { 1479 return Java.sql.Connection.TRANSACTION_NONE; 1480} 1481}
だから私は賭けてgetSession()。connection()。getTransactionIsolation()を信頼します