Spring @Transactional:报告但未实际执行的回滚信息

时间:2011-04-07 22:00:11

标签: java unit-testing spring testing junit

我已按如下方式注释我的测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"file:WebContent/WEB-INF/applicationContext.xml", "file:WebContent/WEB-INF/context-aspects.xml"})
@Transactional
public class MyTest {

}

但是,在执行测试时,测试数据库突然充满了值,尽管启用了@Transactional并且我可以在日志中阅读以下内容:

INFO: Began transaction (4): transaction manager [org.springframework.orm.hibernate3.HibernateTransactionManager@669aa3f3]; rollback [true]
07.04.2011 23:57:33 org.springframework.test.context.transaction.TransactionalTestExecutionListener endTransaction
INFO: Rolled back transaction after test execution for test context ...

为什么没有执行测试用例后实际回滚的任何想法?

更新:如果我使用的是HSQLDB,我没有这些问题 - 那么这是mysql的问题吗?

2 个答案:

答案 0 :(得分:1)

  

更新:如果我使用的是HSQLDB,我没有这些问题 - 那么这是mysql的问题吗?

是的,你是对的。

检查您是否使用了正确的方言(使用Hibernate时:org.hibernate.dialect.MySQL5InnoDBDialect),您可以监控发送到数据库的语句。

答案 1 :(得分:1)

我终于可以解决问题了。 Hibernate生成的MyISAM表显然没有Transaction支持。这是由于配置了错误的休眠方言。我用了 org.hibernate.dialect.MySQL5Dialect,但需要org.hibernate.dialect.MySQL5InnoDBDialect。