我有一个像下面的界面
public interface FooDAO {
public void callA(String x);
}
以及以下实现故意将只读设置为true且不受支持
public class FooDAOImpl implements FooDAO {
//for testing
@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public void callA(String x) {
//sql update method
}
}
在我的春季环境中,我声明了数据源事务管理器和tx:annotation驱动的.我写了一个Junit4测试,看起来像
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(...)
@TransactionConfiguration(transactionManager="txManager", defaultRollback=true)
public class MyTest {
@Resource
FooDAO fooDAO;
@Test
public void testRegisterWorker() {
fooDAO.callA("")
}
}
我希望该记录根本不会插入数据库中.但是,我看到该行实际上已插入到数据库中.我确实使用了Oracle数据库,因此我认为默认情况下自动提交设置为true(我认为).但是spring事务标记不应该覆盖它们吗?
有人可以告诉我这里出了什么问题吗?