【发布时间】:2010-05-27 14:09:54
【问题描述】:
我发现即使我有 Spring 事务包装的代码,并且它会在我期望的时候提交/回滚,为了在使用 Ibatis 和 Spring 时使用 JDBC 批处理,我需要使用显式 SqlMapClient 事务方法.
即这会像我期望的那样进行批处理:
dao.getSqlMapClient().startTransaction();
dao.getSqlMapClient().startBatch();
int i = 0;
for (MyObject obj : allObjects)
{
dao.storeChange(obj);
i++;
if (i % DB_BATCH_SIZE == 0)
{
dao.getSqlMapClient().executeBatch();
dao.getSqlMapClient().startBatch();
}
}
dao.getSqlMapClient().executeBatch();
dao.getSqlMapClient().commitTransaction();
但是如果我没有打开和关闭事务语句,并且依赖 Spring 来管理事情(这是我想做的!),批处理就不会发生。
鉴于 Spring 似乎在处理事务管理方面的讨价还价,任何人都可以就这里的任何已知问题提出建议吗?
(数据库是 MySQL;我知道它的 JDBC 伪批处理方法与 INSERT 语句重写有关的问题,这绝对不是问题)
【问题讨论】: