配置

作為使用 Spring Data Envers 的起點,您需要一個在類路徑中包含 Spring Data JPA 和一個額外的 spring-data-envers 依賴項的專案。

<dependencies>

  <!-- other dependency elements omitted -->

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

</dependencies>

這還將 hibernate-envers 作為瞬態依賴項引入專案。

要啟用 Spring Data Envers 和 Spring Data JPA,我們需要配置兩個 bean 和一個特殊的 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)
{}
1 第一個型別引數 (Person) 表示實體型別,第二個 (Long) 表示 ID 屬性的型別,最後一個 (Long) 是版本號的型別。對於預設配置的 Envers,版本號引數應為 IntegerLong

該倉庫的實體必須是啟用了 Envers 審計的實體(即,它必須具有 @Audited 註解)。

@Entity
@Audited
class Person {

	@Id @GeneratedValue
	Long id;
	String name;
	@Version Long version;
}
© . This site is unofficial and not affiliated with VMware.