我想测试我的DAO,它使用JPA EntityManager来获取和更新实体。我已将单元测试标记为Transactional,并将defaultRollback属性设置为false。但是,在投掷符文时间异常时,我没有看到我的交易在测试结束时回滚。数据持续存在于数据库中。这是我的单元测试代码以及弹簧配置。我明显错过了一些东西,但没有能够确定什么。 顺便说一句,该交易是在persistence.xml春季JUnit JPA交易不回滚
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring/test-jpa.xml"})
@TestExecutionListeners(
{ DependencyInjectionTestExecutionListener.class,
TransactionalTestExecutionListener.class,
DbUnitTestExecutionListener.class
})
@TransactionConfiguration(defaultRollback=false)
@Transactional
public class JpaTests {
@PersistenceContext
EntityManage em;
@Test
public void testTransactionQueueManager() {
Object entity = em.find(1);
//code to update entity omitted.
entity = em.merge(entity);
em.flush();
throw new RuntimeException
}
}
Spring配置文件RESOURCE_LOCAL
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${jpa.driverclassname}" />
<property name="url" value="${jpa.url}" />
<property name="username" value="${jpa.username}" />
<property name="password" value="${jpa.password}" />
</bean>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceUnitName" value="${jpa.persistenceunitname}"/>
<property name="dataSource" ref="dataSource" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.OpenJpaVendorAdapter">
<property name="databasePlatform" value="org.apache.openjpa.jdbc.sql.DBDictionary"/>
</bean>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
您是如何验证事务没有回滚的?数据库有更新值吗?你使用的是哪个数据库,如果它使用什么存储引擎? – gkamal 2013-05-14 07:33:20
是的,我使用SQL Server 2008和数据库已更新的值。顺便说一句,我的JPA提供商的IBM WebSphere瘦客户机 – user320587 2013-05-14 13:41:58
我曾与交易问题不回滚,固定它通过TransactionalTestExecutionListener.class谢谢!!!! – avalon 2017-03-31 11:50:10