Quel est le niveau d'isolation par défaut hibernate utilise si pas explicitement?
J'ai une application qui utilise hibernate version 3.6.4, et c3p0 version 0.9.1.2 pour le regroupement de connexion. Mon SGBD sous-jacent est la version de MySql 5.0.67.
Mon installation de MySql indique que la valeur par défaut niveau d'isolation de transaction est "la reproductibilité de la LECTURE" (4):
mysql> select @@GLOBAL.tx_isolation, @@tx_isolation;
+-----------------------+-----------------+
| @@GLOBAL.tx_isolation | @@tx_isolation |
+-----------------------+-----------------+
| REPEATABLE-READ | REPEATABLE-READ |
+-----------------------+-----------------+
Je n'ai pas changé la configuration ou le niveau d'isolation de transaction au sein de hibernate.cfg.xml ou n'importe où dans mon application. À partir de l'application, j'utilise le code suivant pour imprimer la configuration:
DatabaseMetaData meta = getSession().connection().getMetaData();
System.out.println("Default Tx Isolation: " + meta.getDefaultTransactionIsolation());
System.out.println("Current Tx Isolation: " + getSession().connection().getTransactionIsolation());
Et j'obtiens les résultats suivants:
Default Tx Isolation: 2 (=READ_COMMITTED)
Current Tx Isolation: 4 (=REPEATABLE_READ)
Donc, mes questions sont les suivantes:
- D'où vient le "2" valeur vient? Car la valeur par défaut est la REPEATABLE_READ, pourquoi getDefaultTransactionIsolation() retourne READ_COMMITTED?
- Quel est le niveau d'isolation que hibernate utilise après tout? REPEATABLE_READ ou READ_COMMITTED?
- J'ai pensé que, lorsque aucun niveau d'isolation est défini, hibernate doit utiliser la base de données par défaut. Est-ce vrai? Peut-être que le jbdc pilote de mise en œuvre définit un défaut sur sa propre et hibernate utilise ce?
Vous devez vous connecter pour publier un commentaire.
ressemble à meta.getDefaultTransactionIsolation());
est codé en dur dans la mise en œuvre de DatabaseMetaData dans le pilote mysql
public de la classe DatabaseMetaData implémente java.sql.DatabaseMetaData
les lignes....
donc je serais prêt à parier et de la confiance getSession().connexion().getTransactionIsolation()