@回滚在Spring+中不起作用;冬眠+;Junit测试
在spring+hibernate应用程序中测试DAO函数时,没有发生数据回滚。我正在尝试通过@rollback注释回滚junit测试用例 transactionManager配置:@回滚在Spring+中不起作用;冬眠+;Junit测试,spring,hibernate,spring-data,spring-data-jpa,junit4,Spring,Hibernate,Spring Data,Spring Data Jpa,Junit4,在spring+hibernate应用程序中测试DAO函数时,没有发生数据回滚。我正在尝试通过@rollback注释回滚junit测试用例 transactionManager配置: <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="emf" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="emf" />
</bean>
回滚不会删除创建的对象
那么,“回滚”没有发生的原因是什么呢
编辑1:
我在同一个应用程序中使用SpringDataJPA和基于hibernateTemplate的数据访问。两者都使用与上述bean配置相同的指定事务管理器 您是否将测试配置为使用xml配置,是否指定了SpringJUnit4ClassRunner来运行测试? 您可以这样做:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"testContext.xml"})
@Transactional
public class YourTest{ ... }
它正在使用测试配置文件OK,您确定需要@Rollback注释吗?通常,事务性注释已经在每次测试后回滚更改。这无关紧要。如果发生回滚,则可以。问题似乎出在事务管理器上。我使用两个数据访问工具hibernateTemplate和SpringDataJPA。testcase使用hibernateTemplate访问数据,但我使用org.springframework.orm.jpa.JpaTransactionManager创建了事务管理器。正如我在前面的评论中所说的,这个问题是因为transactionmanager bean的配置。所以把豆子换成了。完成。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"testContext.xml"})
@Transactional
public class YourTest{ ... }