PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Errore di sospensione:la transazione corrente viene interrotta, i comandi ignorati fino alla fine del blocco della transazione

Probabilmente significa che alcune delle tue query non sono state eseguite. Se hai molte domande durante la transazione, ad es.

  • inizia transazione
  • interrogazione1
  • interrogazione2
  • interrogazione3
  • concludere la transazione

e query2 genera un errore, quindi quando si tenta di eseguire query3 viene visualizzato questo errore.

  • inizia transazione
  • query1 (riuscito)
  • query2 (errore, qualcosa è andato storto)
  • query3 (viene generata un'eccezione come la tua)
  • concludere la transazione

Dovresti gestire l'eccezione generata da query2 e gestirla. Mostra qualche errore all'utente, annulla la transazione, non tentare mai di eseguire query3.

Guarda anche qui:http://www.faqs.org/docs/ppbook/x15040 .htm

AGGIORNAMENTO

Per concludere la transazione:

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