2011-04-07 25 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。