Есть ли какой-нибудь трюк для обновления Oracle CLOB с помощью Mybatis 3?

Я обновляю столбец CLOB в своей базе данных Oracle. Параметризованный SQL выглядит так, как будто он выполняется правильно без ошибок, но когда я запускаю выбор, чтобы увидеть изменение, он не был обновлен. Примечание. MyBatis 3 построен с использованием параметризованных запросов JDBC, поэтому эти правила также применимы.

Отображение 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:26,728 DEBUG Connection:Thread main: - ooo
Connection Opened 2012-07-13 12:35:26,837 DEBUG
PreparedStatement:Thread main: - ==> Выполнение: update< br> RSA_SUBMIT_DATA установить TXLIFE_REQUEST = ? где RSA_SUBMIT_QUEUE_ID = ?
13-07-2012 12:35:26,837 DEBUG PreparedStatement:Thread main: - ==>
Параметры: testasdfasdf(String), 51(Integer) 13-07-2012 12:35: 27 024
DEBUG Connection:Thread main: - xxx Connection Closed

Выберите запрос после изменения:

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);

Любая помощь приветствуется.


person Nick    schedule 13.07.2012    source источник
comment
Возможно, вы забыли зафиксировать транзакцию? Можете ли вы добавить код для вызовов Mapper и SqlSession.   -  person Andy    schedule 13.07.2012
comment
Автоматическая фиксация включена. Я добавлю вызов картографа.   -  person Nick    schedule 13.07.2012
comment
Хорошо, хотя он был настроен на автоматическую фиксацию, я попробовал sqlSession.commit(), чтобы увидеть, имеет ли это какое-то значение, и это произошло. Задача решена. но я до сих пор не понимаю, почему это не работало раньше. Спасибо!   -  person Nick    schedule 13.07.2012


Ответы (1)


Я не думаю, что ваш SqlSession открывается с автоматической фиксацией.

Согласно Руководству пользователя MyBatis. , чтобы использовать автоматическую фиксацию, попробуйте.

SqlSession sqlSession = sqlSessionFactory.openSession(true);

Кроме того, ваш оператор журнала фактически открывает новое соединение. См. раздел DataSourceUtils.getConnection и DataSource.getConnection.

Это, вероятно, вернет другое соединение, чем то, которое использует ваш картограф.

person Andy    schedule 13.07.2012