0

我正在尝试在批处理会话对象上运行自定义 sql

@Insert("INSERT INTO ticker(Ticker, GetUpdate) VALUES(#{symbol}, 1) ON DUPLICATE KEY UPDATE GetUpdate = 1")
void enableQuoteforSymbol(@Param("symbol") String symbol);

但是我的以下代码(负责刷新和提交批次)有一些神秘的行为

while(true == continueProcessing.get())
{
    List<BatchResult> batchResult;
    try 
    {
        batchResult = batchSqlSession.flushStatements();

        if(batchResult.size() > 0 )
        {
            batchSqlSession.commit();
            batchSqlSession.clearCache();
        }

        Thread.sleep(configurationManager.BATCH_COMMITER_DELAY);
    }
    catch (Exception ex) 
    {
        logger.error("BatchService::run() - ", ex);
    }
}

它执行完美,并且 batchSqlSession.flushStatements() 确实返回了已执行语句的数量。尽管成功执行了上一个批处理,但此代码batchResult = batchSqlSession.flushStatements(); batchSqlSession.commit(); 在下一次迭代中重新运行相同的旧批次。为什么 ?

4

1 回答 1

0

看起来这是一个错误: http ://code.google.com/p/mybatis/issues/detail?id=695

Aready 已为下一个版本修复。

于 2013-01-22T21:41:18.933 回答