【问题标题】:@Rollback is not working in Spring+Hibernate+Junit testing@Rollback 在 Spring+Hibernate+Junit 测试中不起作用
【发布时间】:2017-03-29 07:39:16
【问题描述】:

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

transactionManager 配置:

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="emf" />
</bean>

在我的主代码中,我使用 hibernateTemplate() 进行 CRUD 操作

测试代码:

@Test
@Transactional
@Rollback(true)
public void test_populateObject() throws Exception {


    // TransactionDefinition def = new DefaultTransactionDefinition();
    // TransactionStatus status = transactionManager.getTransaction(def);

    manualObj= new ManualObj();

    manualObj.setName("TestObj001");
    manualObj.setRefId("TestObj001");
    manualObj.setCallback("TestObj001");
    m
    TestObject obj=orderService.createTestObject(manualObj);

    Assert.assertNotNull(obj);

    // transactionManager.rollback(status);

}

创建的对象没有被回滚删除。

那么,@Rollback 没有发生的原因可能是什么?

编辑 1:

我在同一个应用程序中使用 Spring Data JPA 和基于 hibernateTemplate 的数据访问。两者都使用与上述 bean 配置一样指定的相同事务管理器。

【问题讨论】:

    标签: spring hibernate spring-data spring-data-jpa junit4


    【解决方案1】:

    您是否将您的测试配置为使用 xml 配置,并且您是否指定了 SpringJUnit4ClassRunner 来运行您的测试? 你可以这样做:

    @RunWith(SpringJUnit4ClassRunner.class)  
    @ContextConfiguration(locations = {"testContext.xml"})
    @Transactional
    public class YourTest{ ... }
    

    【讨论】:

    • 它正在使用测试配置文件
    • 好的,您确定需要@Rollback 注释吗?通常,事务注释在每次测试后已经回滚更改。
    • 没关系。如果发生回滚,那很好。似乎问题出在事务管理器上。我使用两个数据访问工具 hibernateTemplate 和 Spring data JPA。测试用例使用 hibernateTemplate 访问数据,但我使用 org.springframework.orm.jpa.JpaTransactionManager 创建了事务管理器。所以我正在考虑改变它。
    • 正如我在之前的评论中所说,问题是由于 transactionmanager bean 配置。所以把bean改成。完成。
    猜你喜欢
    • 2015-05-17
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2018-12-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多