【问题标题】:Transactions in hibernate休眠中的事务
【发布时间】:2011-01-07 08:11:53
【问题描述】:

我是休眠新手

在我的项目中,我需要处理交易。 如何在两个类中处理声明性事务

例子:

//class 1
class A{

  createA()
  {
    insert(A);
  }
}

//class 2
class B
{
  createB()
  {
    insert(B);
  }
}

//class 3
@Transaction(Exception.class)

class C
{

  test()
  {

    create(A);

    create(B);

  }
}

根据上面的代码是否有可能处理事务,如果在classA中的插入成功并且在classB中的插入失败,那么事务应该回滚并删除插入到对应于表A中的记录A类

请使用声明性事务帮助我解决这个问题......

先谢谢了....

【问题讨论】:

    标签: java hibernate transactions


    【解决方案1】:

    Hibernate 像其他任何东西一样支持事务。所以你只需要将 update() 和 save() 的调用封装在一个事务中。

    例子:

    Session sess = factory.openSession();
    Transaction tx = null;
    try {
        tx = sess.beginTransaction();
    
        // your updates to the database
        create(A);
        create(B);
    
    
        tx.commit();
    }
    catch (RuntimeException e) {
        if (tx != null) tx.rollback();
        throw e; // or display error message
    }
    finally {
        sess.close();
    }
    

    你会如愿以偿。如果 beginTransaction() 和 commit() 之间有任何失败,所有内容都会回滚。

    您可能对会话处理有疑问,但这是另一个问题。

    【讨论】:

    • 感谢 Milenkoski,我正在尝试使用声明性事务,所以请您以这种方式帮助我
    • 没有区别。当你注释一个方法 @Transaction 时,它会将整个方法包装在一个事务中。所以样板文件更少......
    • Mikenkiski,你能帮我举个例子吗,我尝试用事务注释包装方法,但没有用。第二次插入失败时正在插入记录
    • 如果您使用 EJB 和容器管理事务,您需要设置: 1. hibernate.transaction.manager_lookup_class 为您的 JEE 容器的查找策略 2. 将 hibernate.transaction.factory_class 设置为 org。 hibernate.transaction.CMTTransactionFactory
    猜你喜欢
    • 2016-03-19
    • 2015-08-30
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多