I have an interface like below
public interface FooDAO {
public void callA(String x);
}
and an implementation as below deliberately making readonly true and not supported
public class FooDAOImpl implements FooDAO {
//for testing
@Transactional(readOnly = true, propagation = Propagation.NOT_SUPPORTED)
public void callA(String x) {
//sql update method
}
}
In my spring context, I declared the Datasource transaction manager and the tx:annotation-driven. I wrote a Junit4 test that looks like
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(...)
@TransactionConfiguration(transactionManager="txManager", defaultRollback=true)
public class MyTest {
@Resource
FooDAO fooDAO;
@Test
public void testRegisterWorker() {
fooDAO.callA("")
}
}
I would have expected the record to not be inserted into the database at all. However I see that the row has infact been inserted into the DB. I do use the Oracle database so I think the autocommit is set to true by default (I think). But shouldn't the spring transactional tags override them?
Can someone tell me what is going wrong here?