You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Testcontainers与@DataJpaTest测试Spring Data Envers遇表不存在问题

解决Spring Data Envers在@DataJpaTest下无法生成审计表的问题

核心原因

@DataJpaTest注解默认仅加载JPA核心配置,会自动排除Spring Data Envers的自动配置类,导致Envers的审计表生成逻辑未触发,同时仓库也不会被包装为支持Envers查询的实现。

解决方案

方案一:为测试类启用Envers仓库支持

在测试类上添加@EnableEnversRepositories注解,确保Envers相关配置被加载:

@DataJpaTest
@Testcontainers
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("tc")
@EnableEnversRepositories // 启用Envers仓库配置
class FooRepositoryITSpec extends Specification {

    @Autowired
    private FooRepository fooRepository

    void "test envers functionality"() {
        given:
        var foo = new Foo()

        when:
        fooRepository.save(foo)
        var revisions = fooRepository.findRevisions(foo.getId())

        then:
        revisions.size() == 1
        var revision = revisions.collect().get(0)
        revision.getRevisionNumber() != null
    }
}

方案二:确保实体类与JPA审计配置正确

  1. 实体类必须标记@Audited注解以开启审计:
@Entity
@Audited // 开启该实体的审计功能
public class Foo {
    // 实体字段定义
}
  1. 项目主配置类需添加@EnableJpaAuditing注解,启用JPA审计基础支持。

方案三:补充测试环境的JPA配置

在application-tc.yaml中添加Envers相关的JPA配置,允许Hibernate自动生成审计表:

spring:
  datasource:
    url: jdbc:tc:postgresql:13:///test_database
    username: user
    password: password
    driver-class-name: org.testcontainers.jdbc.ContainerDatabaseDriver
  jpa:
    hibernate:
      ddl-auto: update # 测试环境下允许Hibernate自动生成审计表
    properties:
      org.hibernate.envers:
        audit_table_suffix: "_aud" # 确保后缀与报错中的表名匹配(默认就是_aud)

备选方案:使用完整Spring Boot上下文测试

如果上述轻量配置仍不生效,可替换@DataJpaTest为@SpringBootTest,加载完整上下文以包含所有Envers配置:

@SpringBootTest
@Testcontainers
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("tc")
@Transactional
class FooRepositoryITSpec extends Specification {
    // 测试代码保持不变
}

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 15:48:30