0

Oracle データベースの CLOB 列を更新しています。パラメータ化された 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 接続: スレッド メイン: - ooo
接続が開かれました 2012-07-13 12:35:26,837 DEBUG
PreparedStatement:スレッド メイン: - ==> 実行中:
RSA_SUBMIT_DATA セット TXLIFE_REQUEST = ? を更新します。RSA_SUBMIT_QUEUE_ID = ?
2012-07-13 12:35:26,837 DEBUG PreparedStatement:Thread main: - ==>
パラメータ: testasdfasdf(String), 51(Integer) 2012-07-13 12:35:27,024
DEBUG Connection:Thread main: - xxx Connection閉まっている

変更後のクエリを選択:

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

どんな助けでも大歓迎です。

4

1 に答える 1

1

SqlSession が自動コミットで開かれているとは思いません。

MyBatis User Guide に従って、自動コミットを使用するには、試してください。

SqlSession sqlSession = sqlSessionFactory.openSession(真);

また、ログステートメントは実際に新しい接続を開いています。DataSourceUtils.getConnection と DataSource.getConnectionを参照してください

これはおそらく、マッパーが使用しているものとは異なる接続を返すでしょう。

于 2012-07-13T20:55:49.657 に答える