java - 事务回滚异常

标签 java hibernate jdbc transactions

我对这个 Hibernate 示例有疑问。我没有在 Hibernate 文档或 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();
}

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

最佳答案

My question is what will happen if transaction rollback method throw an exception?

这取决于异常(exception)是什么。

Will some transaction data be stored in database?

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

How can I handle this exception?

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

关于java - 事务回滚异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19266217/

相关文章:

java - 为什么我的 paintComponent() 方法没有被调用?

java - 与客户端的连接被拒绝

java - 使用 spring 框架 hibernate 的 bootstrap 验证表单

java - 使用 JDBC 从 dbms_output.get_lines 获取输出

javafx 可点击图像 map

java - 如何在 Clojure/Java 中使用 SOAP?

java - commit() 期间通信链接失败。交易决议未知

java - hibernate_sequence 序列名的重复条目

java - 任何格式化结果集 getDate() 方法返回的 Date 对象的机会

java - 一次连接所有表还是多个查询?