PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Erro de hibernação:a transação atual é abortada, comandos ignorados até o final do bloco de transação


Provavelmente significa que algumas de suas consultas não foram executadas. Se você tiver muitas consultas na transação, por exemplo,
  • iniciar transação
  • consulta1
  • consulta2
  • consulta3
  • concluir transação

e query2 lança erro, então quando você tenta executar query3 você recebe este erro.
  • iniciar transação
  • consulta1 (com êxito)
  • query2 (erro, algo deu errado)
  • query3 (exceção como a sua é lançada)
  • concluir transação

Você deve manipular a exceção lançada de query2 e tratá-la. Mostrar algum erro para o usuário, reverter a transação, nunca tentar executar query3.

Veja também aqui:http://www.faqs.org/docs/ppbook/x15040 .htm

ATUALIZAR

Para finalizar a transação:
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");
}