使用Mybatis 3更新Oracle CLOB有一些技巧吗?

时间:2012-07-13 16:43:19

标签: oracle jdbc mybatis clob

我正在更新Oracle数据库中的CLOB列。参数化的SQL看起来正确执行而没有错误,但是当我运行select来查看更改时,它还没有更新。注意:MyBatis 3是使用JDBC参数化查询构建的,因此这些规则也适用。

MyBatis Mapping:

<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:26,728 DEBUG Connection:主线: - ooo
  连接已打开2012-07-13 12:35:26,837调试
  PreparedStatement:主线: - ==&gt;执行:更新
  RSA_SUBMIT_DATA设置TXLIFE_REQUEST =?其中RSA_SUBMIT_QUEUE_ID =?
  2012-07-13 12:35:26,837 DEBUG PreparedStatement:主线: - ==&gt;
  参数:testasdfasdf(String),51(Integer)2012-07-13 12:35:27,024
  DEBUG连接:主线: - xxx连接已关闭

更改后选择查询:

select *
from RSA_SUBMIT_DATA
where RSA_SUBMIT_QUEUE_ID = 51

RSA_SUBMIT_QUEUE_ID | TXLIFE_REQUEST  | TXLIFE_RESPONSE
51             | originalString   | resultString

Mapper调用:

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 个答案:

答案 0 :(得分:1)

我不认为您的SqlSession是通过自动提交打开的。

MyBatis User Guide,要使用自动提交,请尝试。

  

SqlSession sqlSession = sqlSessionFactory.openSession(true);

此外,您的日志语句实际上是在打开一个新连接。见DataSourceUtils.getConnection vs DataSource.getConnection

这可能会返回与映射器正在使用的连接不同的连接。