mybatis @insert重新运行批量更新

时间:2013-01-01 16:03:41

标签: mysql mybatis batch-updates

我正在尝试在批处理会话对象上运行自定义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(); 在下一次迭代中重新运行相同的旧批处理。为什么?

1 个答案:

答案 0 :(得分:0)

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

已为下一个版本修复。