对于最新的稳定版本,请使用 Spring Data JPA 3.3.1Spring中文文档

对于最新的稳定版本,请使用 Spring Data JPA 3.3.1Spring中文文档

作为使用 Spring Data Envers 的起点,您需要一个在类路径上具有 Spring Data JPA 的项目和一个附加依赖项:spring-data-enversSpring中文文档

<dependencies>

  <!-- other dependency elements omitted -->

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

</dependencies>

这也将暂时性依赖关系带入项目。hibernate-enversSpring中文文档

要启用 Spring Data Envers 和 Spring Data JPA,我们需要配置两个 bean 和一个特殊的 :repositoryFactoryBeanClassSpring中文文档

@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 中:Spring中文文档

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

该存储库的实体必须是启用了 Envers 审核的实体(即,它必须具有注释):@AuditedSpring中文文档

@Entity
@Audited
class Person {

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