我在春季使用ibatis写信给mySQL。

我有一个间歇性的错误。在一个过程的每个周期中,我将两行写入DB。我从上一个周期的行中读取的下一个周期。有时(有时在30中有一次,有时更频繁,有时更少)我只从DB中回来一排。

我已经关闭了我能想到的所有缓存。我的sqlmap-config.xml只是说:

<sqlMapConfig>
<settings enhancementEnabled="false" statementCachingEnabled="false" classInfoCacheEnabled="false"/>

<sqlMap resource="ibatis/model/cognitura_core.xml"/>

是否有一些异步,或者在弹簧或Ibatis或我缺少的MySQL驱动程序中缓存?

使用弹簧3.0.5,mybatis 2.3.5,mysql-connector-java 5.0.5

编辑1:

可能是因为我正在使用连接池(C3P0)?我阅读时插入是否仍在运行。不过,这很奇怪,我认为除非我明确宣布Asynch,否则一切都会同步发生?

有帮助吗?

解决方案

您是否在插入后调用sqlsession.commit()? C3P0异步“关闭”连接,该连接可能在封面下呼叫。这可以解释您看到的行为。

其他提示

我得到了类似的行为。这就是我在做的。我有一个旧版本的ibatis,我不打算升级。您可以轻松地将其移入装饰器中。

SqlMapSession session = client.openSession();
try {
    try {
        session.startTransaction();
        // do work
        session.commitTransaction();
        // The transaction should be committed now, but it doesn't always happen.
        session.getCurrentConnection().commit(); // Commit again :/
    } finally {
        session.endTransaction();
    }
} finally {
    session.close(); // would be nice if it was 'AutoCloseable'
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top