【问题标题】:Clear persistence between tests in Spring with OpenJPA使用 OpenJPA 在 Spring 中的测试之间清除持久性
【发布时间】:2020-04-16 23:32:12
【问题描述】:

我正在使用 Spring Data JPA 和 HSQLDB,并将 OpenJPA 作为 JPA 提供程序。

创建了 2 个测试类 (SpringBootTest),它们一个接一个地执行,都使用相同的存储库来保存(使用 CrudRepository 中的 save())实体。

@Entity(name = "theentity")
public class TheEntity {
   @GeneratedValue(strategy= GenerationType.IDENTITY)
   @Id
   private int id;
}


@Bean
public PlatformTransactionManager transactionManager() {
   final JpaTransactionManager tm = new JpaTransactionManager();
   tm.setEntityManagerFactory(entityManagerFactory());
   return tm;
}

问题是,当我运行第二个测试类时,我希望清除持久性,包括identity 列的起始值。

但上述情况并没有发生。

使用hibernate时,添加注解:

@Transactional(propagation = Propagation.NOT_SUPPORTED)

上面的测试类为我完成了全部工作(回滚),不幸的是,注释对 OpenJPA 没有任何作用。

是否有替代方法? 可能需要在persistence.xml 中添加一些属性或向TransactionManager bean 添加一些内容?

【问题讨论】:

    标签: hibernate spring-boot jpa openjpa


    【解决方案1】:

    你试过@DataJpaTest注解吗?这是基于您使用的是 spring boot 的假设。

    默认情况下,数据 JPA 测试是事务性的,并在最后回滚 每次测试。

    来自文档

    Data JPA 测试也可以注入一个 TestEntityManager bean,它 提供标准 JPA EntityManager 的替代方案,即 专为测试而设计。

    例子和细节here

    【讨论】:

    • 可以分享一个示例项目吗?
    猜你喜欢
    • 2012-08-10
    • 2021-09-30
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2012-10-22
    • 2021-12-01
    相关资源
    最近更新 更多