@回滚在Spring+中不起作用;冬眠+;Junit测试

@回滚在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" />

在spring+hibernate应用程序中测试DAO函数时,没有发生数据回滚。我正在尝试通过@rollback注释回滚junit测试用例

transactionManager配置:

<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{ ... }