我發現即使我有Spring事務包裝的代碼,並且它會在我期望的時候提交/回滾,爲了在使用Ibatis和Spring時使用JDBC批處理,我需要使用顯式的SqlMapClient事務方法。Ibatis startBatch()僅適用於SqlMapClient自己的啓動和提交事務,不適用於Spring管理的事務
I.e.這樣做配料如我期望:
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的,我所知道的關於使用INSERT語句改寫它的JDBC僞分批進場的問題,這絕對不是這裏的問題)