【问题标题】:Exception on transaction rollback事务回滚异常
【发布时间】:2013-10-16 11:15:15
【问题描述】:

我对这个 Hibernate 示例有疑问。我没有在 Hibernate docs 或 Manning Persistence with JPA 中找到答案。可能有人可以解释当我使用普通 JDBC 时会发生什么。

Session session = null;
Transaction tx = null;
try {
    session = sessionFactory.openSession();
    tx = session.beginTransaction();

    // Transaction actions   

    tx.commit();
} 
catch (RuntimeException ex) {
    try {
        tx.rollback();
    } 
    catch (RuntimeException rbEx) {
        log.error("Couldn’t roll back transaction", rbEx);
    }
    throw ex;
} 
finally {
    session.close();
}

我的问题是如果事务回滚方法抛出异常会发生什么?一些交易数据会存储在数据库中吗?我该如何处理这个异常?

【问题讨论】:

  • 我不确定,但你可以做一些修改,在提交前抛出异常,不要回滚,然后尝试在重新打开会话的情况下获取一些数据。我想在重新打开会话后看不到您的修改。

标签: java hibernate jdbc transactions


【解决方案1】:

我的问题是如果事务回滚方法抛出异常会发生什么?

这取决于异常是什么。

一些交易数据会存入数据库吗?

未指定。人们希望数据库能够恢复到对应于事务开始的点。但是,在某些情况下,即使这样也可能是不可能的;例如如果您丢失了磁盘驱动器,并且没有热备用。

我该如何处理这个异常?

一般来说,你不能。如果您遇到异常并且不知道它的含义或导致它的原因,那么(在典型的数据库应用程序中)您可以做的唯一明智的事情就是关闭应用程序并让人员调查问题。

【讨论】:

    猜你喜欢
    • 2012-12-28
    • 2016-08-14
    • 1970-01-01
    • 2013-11-23
    • 2015-10-03
    • 2015-03-02
    • 1970-01-01
    • 2013-08-18
    • 2018-08-09
    相关资源
    最近更新 更多