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

默认情况下使用回滚测试jdbcTemplate.batchUpdate,jdbc,transactions,jdbctemplate,Jdbc,Transactions,Jdbctemplate,我正在尝试测试我的dao,它在后台使用jdbcTemplate.batchUpdate方法 我的测试是针对真实数据源运行的,所有方法都在标记为回滚的事务中执行,只有在测试后回滚任何更改。测试事务由PlatformTransactionManager管理 这里的问题是,jdbcTemplate.batchUpdate似乎是在DataSourceTransactionManager启动的单独事务中执行的,因此,我看不到jdbcTemplate所做的更改 我的测试: 刀 是否有任何方法可以在不实际更改

我正在尝试测试我的dao,它在后台使用jdbcTemplate.batchUpdate方法

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

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

我的测试:

是否有任何方法可以在不实际更改数据的情况下测试batchUpdate方法项?
提前谢谢。

很抱歉误导了大家。该问题不是由嵌套事务引起的。 这个问题是我对Java中事务相关类的层次结构以及JDBC中批处理语句的实现方式完全误解的结果

测试失败,因为对的后续调用

myDao.findAllAliasedItems()
被缓存。SpringJDBC模板工作得很好,正如人们所期望的那样

@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();
        }
    });
}
myDao.findAllAliasedItems()