我的数据库帮助程序类中有这两个方法。
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()
他们是我的类变量和方法
答案 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,事情不会发生太大变化。