是否禁止在提交之后开始()相同的事务(事务重用)?

时间:2015-06-23 17:34:53

标签: java hibernate transactions

我的数据库帮助程序类中有这两个方法。

public static void beginTransaction()
{
    if(transaction==null)
    {
        transaction=session.beginTransaction();
    }
    else
    {
        transaction.begin(); //this one
    }
}

public static void commitTransaction()
{
    try {
            transaction.commit();
        }

    } catch (Exception e) {
        if(transaction!=null)
            transaction.rollback();

        closeSession();
        e.printStackTrace();
    }       

}

问题是,在一次操作后调用commitTransaction(),然后再次调用beginTransaction()进行其他操作时会抛出 transaction instance is no longer valid 异常。并且stackTrace指示transaction.begin();操作。

那么,在提交之后是否禁止开始()相同的交易。

我是以错误的方式做到的?

注意:transaction session closeSession()他们是我的类变量和方法

1 个答案:

答案 0 :(得分:2)

这不是处理交易的理想方式,但如果你坚持,你可能需要改变你的方法如下

public static Transaction beginTransaction()
{

     return   session.beginTransaction();

}

public static void commitTransaction(Transaction transaction)
{
    try {
            transaction.commit();
        }

    } catch (Exception e) {
        if(transaction!=null)
            transaction.rollback();

        closeSession();
        e.printStackTrace();
    }       

}

这就是你需要打电话的方式

 Transaction tx = beginTransaction();
 //Do your stuff
 closeTransaction(tx)

<强> [更新] 处理事务的最佳方法是面向方面编程。如果你使用的是spring,那么你就可以让spring完成管理事务的所有工作。如果您想自己管理交易,以下网址会给您一个想法Transactions。我给你的参考是关于hibernate的事务,但是对于JDBC,事情不会发生太大变化。