Протестируйте jdbcTemplate.batchUpdate с откатом по умолчанию

Я пытаюсь протестировать свой dao, который использует метод jdbcTemplate.batchUpdate под капотом.

Мои тесты выполняются с реальным источником данных, и все методы выполняются в транзакциях, отмеченных как только откат (любые изменения откатываются после теста). Тестовые транзакции управляются PlatformTransactionManager.

Проблема здесь в том, что jdbcTemplate.batchUpdate, похоже, выполняется в отдельной транзакции, запущенной DataSourceTransactionManager, и поэтому я не вижу изменений, внесенных jdbcTemplate.

Мой тест:

@Transactional
@TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)
@RunWith(SpringJUnit4ClassRunner.class)
public abstract class AbstractDbUnitTest
...
@Test
public void removeSpecific() {
    myDao.removeSpecific(myDao.findAllAliasedItems());
    Assert.assertEquals(0, myDao.findAllAliasedItems().size());
}

Дао

@Override
public void removeSpecific(final List<? extends Item> items) {
    jdbcTemplate.batchUpdate("delete from ITEM where item_type = ? and item_id = ?", new BatchPreparedStatementSetter() {
        @Override
        public void setValues(PreparedStatement ps, int i) throws SQLException {
            ps.setString(1, items.get(i).getType().name());
            ps.setString(2, items.get(i).getId(););
        }

        @Override
        public int getBatchSize() {
            return items.size();
        }
    });
}

Есть ли способ протестировать элемент метода batchUpdate без фактического изменения данных? Заранее спасибо.


person edio    schedule 08.04.2013    source источник


Ответы (1)


Прошу прощения за то, что ввел вас в заблуждение. Проблема не была вызвана вложенной транзакцией. Этот вопрос является результатом моего полного непонимания иерархии связанных с транзакциями классов в Java и того, как реализованы пакетные операторы в JDBC.

Тест не удался, потому что последующие вызовы

myDao.findAllAliasedItems()

были кешированы. Шаблон Spring JDBC работал нормально, как и следовало ожидать.

person edio    schedule 31.05.2013