我有一个实体 Post 并注册了一个事件监听器,如下所示。
@EntityListeners({EntityAuditor.class})
@Entity
class Post {
...
}
这是我的 EntityAuditor 监听器类的样子:
public class EntityAuditor {
@PostPersist
void publishToKafka(Object object) {
// publish new object to Kafka
}
}
当我的单元/集成测试尝试创建新帖子时,我不希望调用此函数。有没有办法可以跳过 JPA 生命周期 Hook 或仅用于测试的事件监听器?
最佳答案
根据 JPA 规范 EntityListeners
可以使用 <entity-listeners>
覆盖注释<entity>
的子元素持久化对象/关系中的元素
映射文件。
因此,您应该仅在您的测试环境中包含 META-INF/orm.xml 文件,并设置一个空 <entity-listeners>
为您的实体。像这样的事情
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm http://xmlns.jcp.org/xml/ns/persistence/orm_2_2.xsd"
version="2.2">
<entity class="yourpackage.Post">
<entity-listeners />
</entity>
</entity-mappings>
关于spring - 运行测试时跳过 JPA 生命周期方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60304120/