JPA et MySQL niveau d'isolation de transaction

J'ai une requête native qui ne un lot insérer dans une base de données MySQL:

    String sql = "insert into t1 (a, b) select x, y from t2 where x = 'foo'";
    EntityTransaction tx = entityManager.getTransaction();
    try {
        tx.begin();
        int rowCount = entityManager.createNativeQuery(sql).executeUpdate();
        tx.commit();
        return rowCount;
    }
    catch(Exception ex) {
        tx.rollback();
        log.error(...);
    }

Cette requête provoque un blocage: pendant qu'il lit à partir de t2 avec insert .. select, un autre processus tente d'insérer une ligne dans t2.

Je ne se soucient pas de la cohérence de lit à partir de t2 lors d'une insert .. select et que vous voulez définir le niveau d'isolation de transaction à READ_UNCOMMITTED.

Comment puis-je aller sur la configuration dans JPA?


Mise à jour

J'ai donc fini par la création d'un régulier de connexion SQL, pour ce cas, comme il me semble l'option la plus simple. Merci à tous!

Je ne comprends pas comment il conduit à une impasse? Si tx1 exécuter l' : insert into t1 (a, b) sélectionnez x, y de t2 où x = 'foo' Et tout ce qui se passe à la deuxième tx faire insérer dans "t2" de la table, que tx1 avoir à attendre jusqu'à tx2 prendra fin, après tx2 a terminé la tx1 continuer. Dedalock dire que le tx2 tout en faisant des inserts en t2 également de faire la lecture à partir de t1? Est-ce votre cas? je veux dire quelque chose comme cela conduit à une impasse: tx1: insert into t1 (a, b) sélectionnez x, y de t2 où x = 'foo' tx2: insert into t2 (a, b) sélectionnez x, y de t1 où x = 'foo'

OriginalL'auteur armandino | 2010-05-27