2014-02-13 67 views
0

我有問題使用Mybatis SqlSession實例回滾到特定的保存點。我的web應用程序中沒有Spring框架。因此,當第二次插入失敗時,我手動回滾事務。事務回滾到保存點在MyBatis中失敗

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不存在

不知道我在這裏丟失了什麼。 謝謝

回答

0

在MySQL中,所有事務的保存點都會在執行提交或回滾時被刪除而不執行保存點。

因此,如果anotherInsertionSucceeded==false事務是第一次提交或回退並且所有保存點都被刪除,則回滾到保存點失敗。