如何在 Quarkus 测试中清除可嵌入类型的数据库 table
How to clear database table for embeddable type in Quarkus test
我需要在 Quarkus 应用程序中清除我的数据库的 tables。我可以通过调用 entity.deleteAll()
为扩展 PanacheEntity
或 PanacheEntityBase
的实体实现此目的。如何清除可嵌入类型的 table?
一种可能的解决方案是使用带有 Flyway 的 JUnit 5 扩展来管理您的架构,并在每次测试时重置数据库的状态
您可以在此处找到扩展程序:https://github.com/radcortez/flyway-junit5-extensions/
这里是 Quarkus 示例:https://github.com/radcortez/flyway-junit5-extensions/tree/master/examples/quarkus
所以我能够自己解决这个问题,这是我所做的:
- 注入一个 EntityManager 实例
- 在清理方法中(在我的例子中是 tearDown()),我编写并执行了一个本机查询来清除我的 table“course_description”。
注意:我有一个实体
Course
和一个可嵌入的 CourseDescription
。 CourseDescription
嵌入在 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();
}
我需要在 Quarkus 应用程序中清除我的数据库的 tables。我可以通过调用 entity.deleteAll()
为扩展 PanacheEntity
或 PanacheEntityBase
的实体实现此目的。如何清除可嵌入类型的 table?
一种可能的解决方案是使用带有 Flyway 的 JUnit 5 扩展来管理您的架构,并在每次测试时重置数据库的状态
您可以在此处找到扩展程序:https://github.com/radcortez/flyway-junit5-extensions/
这里是 Quarkus 示例:https://github.com/radcortez/flyway-junit5-extensions/tree/master/examples/quarkus
所以我能够自己解决这个问题,这是我所做的:
- 注入一个 EntityManager 实例
- 在清理方法中(在我的例子中是 tearDown()),我编写并执行了一个本机查询来清除我的 table“course_description”。
注意:我有一个实体
Course
和一个可嵌入的CourseDescription
。CourseDescription
嵌入在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();
}