我已按如下方式注释我的测试类:
@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的问题吗?
答案 0 :(得分:1)
更新:如果我使用的是HSQLDB,我没有这些问题 - 那么这是mysql的问题吗?
是的,你是对的。
检查您是否使用了正确的方言(使用Hibernate时:org.hibernate.dialect.MySQL5InnoDBDialect),您可以监控发送到数据库的语句。
答案 1 :(得分:1)
我终于可以解决问题了。 Hibernate生成的MyISAM表显然没有Transaction支持。这是由于配置了错误的休眠方言。我用了 org.hibernate.dialect.MySQL5Dialect,但需要org.hibernate.dialect.MySQL5InnoDBDialect。