sobre problema hibernar habilitar hibernate isolation-level transaction-isolation

hibernate - habilitar - problema hibernar ubuntu



¿Cuál es el nivel de aislamiento predeterminado que utiliza hibernación si no se establece explícitamente? (1)

parece meta.getDefaultTransactionIsolation ()); está codificado en la implementación de DatabaseMetaData en el controlador mysql

La clase pública DatabaseMetaData implementa líneas 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 }

así que apostaría y confiaría en getSession (). connection (). getTransactionIsolation ()

Tengo una aplicación que utiliza la versión 3.6.4 de hibernate y la versión 0.9.1.2 de c3p0 para la agrupación de conexiones. Mi RDBMS subyacente es la versión 5.0.67 de MySql.

Mi instalación de MySql indica que el nivel de aislamiento de transacción predeterminado es "REPEATABLE-READ" (4):

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

No he cambiado ni configurado el nivel de aislamiento de transacción dentro de hibernate.cfg.xml o en cualquier lugar dentro de mi aplicación. Desde la aplicación, uso el siguiente código para imprimir la configuración:

DatabaseMetaData meta = getSession().connection().getMetaData(); System.out.println("Default Tx Isolation: " + meta.getDefaultTransactionIsolation()); System.out.println("Current Tx Isolation: " + getSession().connection().getTransactionIsolation());

Y obtengo los siguientes resultados:

Default Tx Isolation: 2 (=READ_COMMITTED) Current Tx Isolation: 4 (=REPEATABLE_READ)

Entonces, mis preguntas son las siguientes:

  1. ¿De dónde vino el valor de "2"? Dado que el valor predeterminado es REPEATABLE_READ, ¿ por qué getDefaultTransactionIsolation () devuelve READ_COMMITTED?
  2. ¿Cuál es el nivel de aislamiento que utiliza la hibernación después de todo? REPEATABLE_READ o READ_COMMITTED?
  3. Pensé que cuando no se establece un nivel de aislamiento, la hibernación debería usar el valor predeterminado de la base de datos subyacente. ¿Es esto cierto? ¿Tal vez la implementación del controlador jbdc establece un valor predeterminado por sí solo y la hibernación usa esto?