我正在使用Spring 3和Hibernate 3.5,我沒有讓我的事務回滾在測試環境中,這讓我擔心他們不會在生產中回滾。春季交易單元測試 - 休眠查詢不回滾
測試類:
@ContextConfiguration(loader = MyConfigurationLoader.class)
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class DashTemplateRepositoryTest extends AbstractMulitpleDataSourceSpringContextTests {
@Autowired
DashTemplateRepository dashTemplateRepository;
@Test
public void testSaveCategory() {
int initialCount = getCategoryCount();
Category c = new Category();
c.setName("mynewcategory");
dashTemplateRepository.save(c);
assertEquals(initialCount + 1, getCategoryCount());
}
}
延伸自定義類:
public abstract class AbstractTransactionalTemplateTests extends AbstractTransactionalJUnit4SpringContextTests {
protected SimpleJdbcTemplate simpleJdbcTemplate;
@Autowired
DashTemplateRepository dashTemplateRepository;
@Resource(name = "dashDataSource")
public void setDataSource(final DataSource dataSource) {
this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
} ..snip...
更新:我需要做SimpleJdbcTemplate進行插入,因爲我有多個數據源,默認情況下這個測試類可以」但我沒有找到支持Spring的解決方案,但在春季論壇上,貢獻者發佈了這個解決方案。在我提取這個超類之前存在回滾問題。我假設問題比這更基本,hibernate似乎並沒有意識到事務管理器,有什麼方法可以證明這一點?
數據源豆:
<bean id="dashDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/dashtemplate"/>
<property name="username" .../>
<property name="password" .../>
</bean>
我的上下文text.xml(簡體,離開了它的一些)
<!-- Hibernate -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dashDataSource" />
<property name="annotatedClasses">
<list>
<value>com.dash.Category</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
</bean>
<bean id="dashTemplateRepository" class="com.wdp.DashTemplateRepositoryHibernateTemplateImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
測試運行正常,我的對象持久化,但是它不可能回滾,似乎沒有任何錯誤
是什麼'DashTemplateRepositoryHibernateTemplateImpl'樣子支持? – skaffman 2010-07-12 22:01:31
爲什麼要回滾? – Bozho 2010-07-13 00:07:24
@Bozho:我相信'@ TransactionConfiguration'的'defaultRollback'屬性應該表示 – skaffman 2010-07-13 08:37:02