sql >> Databasteknik >  >> RDS >> PostgreSQL

Vilolägesfel:aktuell transaktion avbryts, kommandon ignoreras till slutet av transaktionsblocket

Det betyder förmodligen att några av dina frågor inte kördes. Om du har många frågor i transaktionen, t.ex.

  • börja transaktionen
  • fråga1
  • fråga2
  • fråga3
  • slutför transaktionen

och query2 kastar fel, när du försöker köra query3 får du det här felet.

  • börja transaktionen
  • fråga1 (lyckad)
  • fråga2 (fel, något gick fel)
  • query3 (undantag som ditt kastas)
  • slutför transaktionen

Du bör hantera undantag som kastas från query2 och hantera det. Visa något fel för användaren, återställningstransaktion, försök aldrig att köra fråga3.

Titta även här:http://www.faqs.org/docs/ppbook/x15040 .htm

UPPDATERING

För att avsluta transaktionen:

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");
}



  1. MySQL exporterar INTO OUTFILE --secure-file-priv-fel vid användning av set-katalogen

  2. mysql-liknande problem vid partiell matchning

  3. SQL fortsätter att köra frågor efter duplicerad nyckelöverträdelse

  4. Läs en ARRAY från en STRUKT som returneras av en lagrad procedur