我无法理解为什么Spring @Transactional
测试方法Hibernate不会回滚在@Before
中进行的更改? information @Before
在一个事务中调用@Test
和@Test
@RunWith(SpringJUnit4ClassRunner.class)
@Transactional(defaultRollback = true, transactionManager = "transactionManager")
public class TestClass {
@Autowired
private SessionFactory sessionFactory;
@Autowired
private EntityDao entityDao;
@Before
public void before() {
// create arbitrary entity
Entity one = Utils.createEntity();
// save with HibernateDao to table_1
entityDao.save(one);
}
@Test
public void test() {
sessionFactory.getCurrentSession().createSQLQuery("TRUNCATE table_2").executeUpdate();
}
}
。可以考虑配置所有上下文。
createSQLQuery().executeUpdate
如果没有@Before
,{{1}}中的所有更改都会根据需要进行回滚。
答案 0 :(得分:0)
TRUNCATE
查询隐式提交事务(因为它被认为是一个DDL查询:它删除并重新创建一个表)。 DDL查询通常会导致提交。
如果您需要具有交易效果良好的替代方案,则可以使用DELETE FROM <table-name>
。
<强>更新强>
更多信息:Do DDL statements always give you an implicit commit, or can you get an implicit rollback?