我正在更新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);
任何帮助表示赞赏。
也许你忘了提交交易?你可以添加Mapper和SqlSession调用的代码吗? – Andy 2012-07-13 18:35:32
自动提交已启用。我将添加mapper调用。 – Nick 2012-07-13 19:05:39
好的,尽管它被设置为自动提交,但我尝试了sqlSession.commit()以查看它是否有任何区别,并且它确实如此。问题解决了。但我仍然不明白为什么它以前没有工作。谢谢! – Nick 2012-07-13 19:58:51