PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ruhezustandsfehler:aktuelle Transaktion wird abgebrochen, Befehle werden bis zum Ende des Transaktionsblocks ignoriert

Dies bedeutet wahrscheinlich, dass einige Ihrer Abfragen nicht ausgeführt wurden. Wenn Sie viele Abfragen in der Transaktion haben, z. B.

  • Transaktion beginnen
  • Abfrage1
  • Abfrage2
  • Abfrage3
  • Transaktion abschließen

und query2 wirft einen Fehler, dann erhalten Sie diesen Fehler, wenn Sie versuchen, query3 auszuführen.

  • Transaktion beginnen
  • Abfrage1 (erfolgreich)
  • query2 (Fehler, etwas ist schief gelaufen)
  • query3 (Ausnahme wie Ihre wird ausgelöst)
  • Transaktion abschließen

Sie sollten die von Abfrage2 ausgelöste Ausnahme behandeln und behandeln. Zeigen Sie dem Benutzer einen Fehler, setzen Sie die Transaktion zurück, versuchen Sie niemals, query3 auszuführen.

Siehe auch hier:http://www.faqs.org/docs/ppbook/x15040 .htm

AKTUALISIEREN

Um die Transaktion abzuschließen:

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