跳到主要内容
版本:4.1.1

配置

Doubao 中英对照 Configuration

要使用 Spring Data Envers,首先需要一个 classpath 上带有 Spring Data JPA 的项目,并额外添加 spring-data-envers 依赖:

<dependencies>

<!-- other dependency elements omitted -->

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-envers</artifactId>
<version>4.1.1</version>
</dependency>

</dependencies>

这还会把 hibernate-envers 作为传递性依赖引入项目。

要启用 Spring Data Envers 和 Spring Data JPA,我们需要配置三个 bean(DataSource、EntityManagerFactory 和 PlatformTransactionManager)。@EnableEnversRepositories 已经自动提供了 repositoryFactoryBeanClass:

@Configuration
@EnableEnversRepositories
@EnableTransactionManagement
public class EnversDemoConfiguration {

@Bean
public DataSource dataSource() {

EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
return builder.setType(EmbeddedDatabaseType.HSQL).build();
}

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {

HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(true);

LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
factory.setPackagesToScan("example.springdata.jpa.envers");
factory.setDataSource(dataSource());
return factory;
}

@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {

JpaTransactionManager txManager = new JpaTransactionManager();
txManager.setEntityManagerFactory(entityManagerFactory);
return txManager;
}
}

要真正使用 Spring Data Envers,请将一个或多个仓库扩展为 RevisionRepository,即把它作为扩展接口添加:

interface PersonRepository
extends CrudRepository<Person, Long>,
RevisionRepository<Person, Long, Long> 1
{}
  • 第一个类型参数(Person)表示实体类型,第二个(Long)表示 id 属性的类型,最后一个(Long)是修订号的类型。对于默认配置下的 Envers,修订号参数应为 Integer 或 Long。

该仓库对应的实体必须是启用了 Envers 审计的实体(即必须带有 @Audited 注解):

@Entity
@Audited
class Person {

@Id @GeneratedValue
Long id;
String name;
@Version Long version;
}