Какой уровень изоляции по умолчанию используется в спящем режиме, если он не установлен явно?

У меня есть приложение, которое использует спящий режим версии 3.6.4 и c3p0 версии 0.9.1.2 для пула соединений. Моя основная СУБД - 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)

Итак, мои вопросы следующие:

  1. Откуда взялось значение «2»? Поскольку по умолчанию используется REPEATABLE_READ, почему getDefaultTransactionIsolation () возвращает READ_COMMITTED?
  2. Какой уровень изоляции в конце концов использует спящий режим? REPEATABLE_READ или READ_COMMITTED?
  3. Я думал, что, когда уровень изоляции не установлен, спящий режим должен использовать значение по умолчанию для базовой базы данных. Это правда? Может быть, реализация драйвера jbdc сама по себе устанавливает значение по умолчанию, а спящий режим использует это?
25
задан Cœur 18 June 2017 в 15:19
поделиться