默认情况下使用回滚测试jdbcTemplate.batchUpdate

时间:2013-04-08 13:41:09

标签: jdbc transactions jdbctemplate

我正在尝试测试我的dao,它使用了引擎盖下的jdbcTemplate.batchUpdate方法。

我的测试是针对实际数据源运行的,所有方法都在标记为仅回滚的事务中执行(任何更改都会在测试后回滚)。测试交易由 PlatformTransactionManager 管理。

这里的问题是,jdbcTemplate.batchUpdate似乎是在 DataSourceTransactionManager 启动的单独事务中执行的,因此,我看不到jdbcTemplate所做的更改。 / p>

我的测试:

@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方法项? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我很抱歉误导你们所有人。该问题不是由嵌套事务引起的。 这个问题是我对Java中与事务相关的类的层次结构完全误解以及如何实现JDBC中的批处理语句的结果。

测试失败,因为后续调用

myDao.findAllAliasedItems()

被缓存了。 Spring JDBC模板运行得很好,正如人们所期望的那样。