Выяснив причину этого, прочитав различные ресурсы, методом проб и ошибок, я записал наши результаты здесь, поскольку это может помочь кому-то еще.
Оказывается, что различные варианты поведения были связаны с нашими классами DAO, расширяющими Spring SqlMapClientTemplate. В этом классе у вас есть два «выбора» (я говорю «выбор; один правильный, другой на самом деле нет»):
прямое использование insert (), update () и т.д .; полное использование объектов Spring
getSqlMapClient (). Insert (), update () и т. Д .; на самом деле этот работает с использованием объекта com.ibatis ..., возвращаемого getSqlMapClient (), а не Spring *
Оба обычно работают , но из моего прочтения первый вариант лучше, например. если вы используете Spring, вы хотите быть полностью основанными на Spring, а не «выпрыгивать» на объекты Ibatis.
Теперь SqlMapClientTemplate не предоставляет доступ к startBatch () / executeBatch () напрямую, только удобный метод вставки (), update (), поэтому такой код необходим для подобных вещей. Приведенный ниже код полностью работает с нашими транзакциями, управляемыми Spring, а не с явным кодом startTransaction ().
(отказ от ответственности может содержать ошибки из-за моего "анонимного" рабочего кода для ясности)
public class MyFunkyDao extends SqlMapClientDaoSupport
{
private static final int DB_BATCH_SIZE = 1000;
public void storeMyData(final List<MyData> listData)
{
getSqlMapClientTemplate().execute( new SqlMapClientCallback()
{
@Override
public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException
{
int count = 0, total = 0;
Map<String, Object> params = new HashMap<String, Object>();
executor.startBatch();
for (MyData data: listData)
{
params.put("param name 1", data.getValue());
executor.insert("insertData", params);
count++;
if (count % DB_BATCH_SIZE == 0)
{
total += executor.executeBatch();
executor.startBatch();
}
params.clear();
}
total += executor.executeBatch();
return new Integer(total);
}
});
}
}
Ссылка: http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/orm/ibatis/SqlMapClientTemplate.html