在JPA错误之后从PostgreSQL连接中恢复

时间:2014-03-04 17:30:00

标签: java hibernate postgresql jpa

有时我的应用程序会尝试删除引用其他数据的数据,这会引发预期的数据完整性违规行为#34;

  

错误org.hibernate.util.JDBCExceptionReporter - Entrada em lote 0从item_tabela_protese删除,其中id =' 2' foi abortada。 Chame getNextException para ver a causa。

     

错误org.hibernate.util.JDBCExceptionReporter - 错误:更新或删除表" item_tabela_protese"违反外键约束" fk_item_tabela_protese"在桌子上" pedido_protese"         Detalhe:Key(id)=(2)仍然从表" pedido_protese"中引用。

在上面的这个错误之后,我无法在应用程序中执行任何操作,我得到了一个" Postgres连接已关闭"。

  

错误org.hibernate.util.JDBCExceptionReporter - 此连接已关闭。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

强制回滚后,您必须关闭会话并获取新会话。通常,您只需rollback事务并打开一个新事务,但看起来Hibernate可能会在看到错误时关闭连接。如果没有更多的日志细节,很难确定。

首先尝试回滚事务并获取新的Hibernate会话。

您不能在失败后继续在同一个事务中使用会话。该事务处于无效状态,除ROLLBACK之外的所有语句都会产生错误。

如果您希望处理可能能够使用SAVEPOINTROLLBACK TO SAVEPOINT(性能成本),但很可能Hibernate的缓存不会处理得好。