如何在 Quarkus 测试中清除可嵌入类型的数据库 table

How to clear database table for embeddable type in Quarkus test

我需要在 Quarkus 应用程序中清除我的数据库的 tables。我可以通过调用 entity.deleteAll() 为扩展 PanacheEntityPanacheEntityBase 的实体实现此目的。如何清除可嵌入类型的 table?

一种可能的解决方案是使用带有 Flyway 的 JUnit 5 扩展来管理您的架构,并在每次测试时重置数据库的状态

您可以在此处找到扩展程序:https://github.com/radcortez/flyway-junit5-extensions/

这里是 Quarkus 示例:https://github.com/radcortez/flyway-junit5-extensions/tree/master/examples/quarkus

所以我能够自己解决这个问题,这是我所做的:

  1. 注入一个 EntityManager 实例
  2. 在清理方法中(在我的例子中是 tearDown()),我编写并执行了一个本机查询来清除我的 table“course_description”。 注意:我有一个实体 Course 和一个可嵌入的 CourseDescriptionCourseDescription 嵌入在 Course 中 示例:
@Embedded
@ElementCollection
public List<CourseDescription> courseDescriptions;

我的测试Class:

    @PersistenceContext
    EntityManager entityManager;

...

    @AfterEach
    @Transactional
    public void tearDown(){
        Query query = entityManager.createNativeQuery("DELETE FROM course_description")
                .setHint(COMMENT, "Custom cleanup for embeddable type CourseDescription");
        query.executeUpdate();
        Course.deleteAll();
    }