2012-07-13 36 views
0

我正在更新Oracle數據庫中的CLOB列。參數化的SQL看起來像正確執行沒有錯誤,但是當我運行select查看更改時,它尚未更新。注意:MyBatis 3是使用JDBC參數化查詢構建的,因此這些規則也適用。是否有一些技巧用Mybatis 3更新Oracle CLOB?

MyBatis的映射:

<update id="updateRSA103RequestData" parameterType="com.company.domain.RSA103XMLData" flushCache="true"> 
     update 
     RSA_SUBMIT_DATA 
     set TXLIFE_REQUEST = #{request} 
     where RSA_SUBMIT_QUEUE_ID = #{id} 
</update> 

運行日誌:

2012-07-13 12:35:26728調試連接:線程主: - OOO
連接開業2012-07-13 12:35:26,837調試
PreparedStatement:線程主要: - ==>執行:更新
RSA_SUBMIT_DATA設置TXLIFE_REQUEST =?其中RSA_SUBMIT_QUEUE_ID =?
2012-07-13 12:35:26837 DEBUG的PreparedStatement:線程主: - ==>
參數:testasdfasdf(字符串),51(整數)2012-07-13 12:35:27024
調試連接:螺紋主力: - XXX連不上

變更後的選擇查詢:

select * 
from RSA_SUBMIT_DATA 
where RSA_SUBMIT_QUEUE_ID = 51 

RSA_SUBMIT_QUEUE_ID | TXLIFE_REQUEST | TXLIFE_RESPONSE 
51    | originalString | resultString 

映射器調用:

SqlSession sqlSession = sqlSessionFactory.openSession(); 
try { 
    log.debug("autoCommit: " + sqlSessionFactory.getConfiguration().getEnvironment().getDataSource().getConnection().getAutoCommit()); 
    PolicyTransactionMapper policyTransactionDAO = sqlSession 
       .getMapper(PolicyTransactionMapper.class); 
    RSA103XMLData xmlData = new RSA103XMLData(); 
    xmlData.setId(rsaSubmitQueueID); 
    xmlData.setRequest(request); 
    policyTransactionDAO.updateRSA103RequestData(xmlData); 

任何幫助表示讚賞。

+1

也許你忘了提交交易?你可以添加Mapper和SqlSession調用的代碼嗎? – Andy 2012-07-13 18:35:32

+0

自動提交已啓用。我將添加mapper調用。 – Nick 2012-07-13 19:05:39

+0

好的,儘管它被設置爲自動提交,但我嘗試了sqlSession.commit()以查看它是否有任何區別,並且它確實如此。問題解決了。但我仍然不明白爲什麼它以前沒有工作。謝謝! – Nick 2012-07-13 19:58:51

回答

1

我不認爲你的SqlSession是用自動提交打開的。

MyBatis User Guide,要使用自動提交,請嘗試。

SqlSession sqlSession = sqlSessionFactory.openSession(true);

此外,您的日誌語句實際上是打開一個新的連接。請參閱DataSourceUtils.getConnection vs DataSource.getConnection

這可能會返回與您的映射器無論如何使用的連接不同的連接。