PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Erreur d'hibernation :la transaction en cours est abandonnée, les commandes sont ignorées jusqu'à la fin du bloc de transaction

Cela signifie probablement que certaines de vos requêtes n'ont pas été exécutées. Si vous avez de nombreuses requêtes en transaction, par exemple

  • commencer la transaction
  • requête1
  • requête2
  • requête3
  • terminer la transaction

et query2 génère une erreur, puis lorsque vous essayez d'exécuter query3, vous obtenez cette erreur.

  • commencer la transaction
  • requête1 (réussie)
  • query2 (erreur, quelque chose s'est mal passé)
  • query3 (une exception comme la vôtre est levée)
  • terminer la transaction

Vous devez gérer l'exception levée par query2 et la gérer. Montrez une erreur à l'utilisateur, annulez la transaction, n'essayez jamais d'exécuter la requête3.

Regardez aussi ici :http://www.faqs.org/docs/ppbook/x15040 .htm

MISE À JOUR

Pour terminer la transaction :

List object = null; 
try {
  org.hibernate.Transaction tx = session.beginTransaction(); 
  try { 
    Query q = session.createQuery("from Table where lower(translatedText) like lower('%" + term + "%') or lower(translatedAscii) like lower('%" + term + "%') or lower(originalAscii) like lower('%" + term + "%')"); 
    object = (List<Table>) q.list(); 
  } catch (Exception e) {
    e.printStackTrace(); 
  } finally {
    //You can safely rollback here because you are not changing anything in the DB.
    //If you change something, you should commit transaction at the end of try block,
    //and here check if it is still active and rollback if it is.
    tx.rollback();
  }
  return object; 
} catch (HibernateException e) {
  throw new RuntimeException("Could not begin transaction");
}