在MyBatis中,事务回滚到保存点失败

时间:2014-02-13 12:03:15

标签: transactions mybatis rollback

我在使用Mybatis SqlSession实例回滚到特定保存点时遇到问题。我的Web应用程序中没有Spring框架。因此,只要第二次插入失败,我就会手动回滚事务。

    private SqlSessionFactory sqlSessionFactory;

    private MyRepositoryDAO()
    {
       sqlSessionFactory = MyBatisConnectionFactory.getSqlSessionFactory();
    }

    SqlSession session = sqlSessionFactory.openSession();
    Savepoint savePointA = session.getConnection.setSavePoint();

    if(insertionSuceeded)
    {
       session.commit();
    }
    else
    {
        session.rollback();
    }

    If(anotherInsertionSucceeded)
    {
         session.commit();
    }
    else
    {
          session.getConnection().rollback(savePointA)
     }

如果我运行这段代码,我会收到以下错误。 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SAVEPOINT 688bd22f_1442b1b7a9c__8000不存在

不确定我在这里缺少什么。 感谢

1 个答案:

答案 0 :(得分:0)

在MySQL中,当执行不带保存点的提交或回滚时,将删除所有事务的保存点。

因此,如果首次提交或回滚anotherInsertionSucceeded==false事务并删除所有保存点,则回滚到保存点失败。