spring - 运行测试时跳过 JPA 生命周期方法

标签 spring hibernate spring-boot jpa spring-data-jpa

我有一个实体 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/

相关文章:

java - servlet 上下文错误

java - 使用 Spring Data Embedded Mongo 在 Mongo 数据库中导入 JSON 文件

java - 未找到具有 URI 的 HTTP 请求的映射

java - 如何在我的 Spring Boot 代码中处理亚马逊 s3 存储桶的 404 错误

java - 通过网络公开 jar 资源

hibernate - QueryBuilder 中的 Lucene 条件 AND

java - 这些选项之间有什么不同如何在 spring 中将类设置为其他选项

java - 如果我从代码中排除 session.evict() 会发生什么?

spring - 设置 Jackson 功能 WRITE_DATES_AS_TIMESTAMPS 在 Spring Boot 中不起作用

java - 自定义错误 Controller 中的@Controller和@RequestMapping