gpt4 book ai didi

java - 提交后是否禁止 begin() 同一事务(事务重用)?

转载 作者:行者123 更新时间:2023-12-02 04:34:35 25 4
gpt4 key购买 nike

我的数据库助手类中有这两种方法。

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不再有效异常。并且 stackTrace 指示 transaction.begin(); 操作。

那么,提交后是否禁止begin()同一个事务?
或者
我这样做的方式不对吗?

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

最佳答案

这不是处理事务的理想方式,但如果您坚持这样做,您可能需要更改您的方法,如下所示

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,事情不会有太大变化。

关于java - 提交后是否禁止 begin() 同一事务(事务重用)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31009640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com