2011-04-07 22 views
1

我有我的注解测试类如下:春@Transactional:报告回滚信息,但未被实际执行

@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 [[email protected]69aa3f3]; 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的问题?

+1

你在使用什么数据库引擎? – 2011-04-07 22:03:39

+0

如果是MySQL,您使用哪种类型:MyISAM或InnoDB? – Ralph 2011-04-08 06:44:01

+0

我正在使用MySQL InnoDB。在另一个项目中,它与相同的数据库一起工作,但我无法弄清楚配置中的差异。 – Erik 2011-04-08 11:15:36

回答

1

更新:如果我使用HSQLDB,我没有这些问题 - 这是一个问题的MySQL?

是的你是对的。

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

+0

很酷,我在5分钟前找到了这个答案,并且发布了它... – Erik 2011-04-11 10:42:36

1

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