組態
作為使用 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>3.4.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,修訂編號參數應為 Integer 或 Long 。 |
該儲存庫的實體必須是啟用 Envers 稽核的實體(也就是說,它必須具有 @Audited
註解)
@Entity
@Audited
class Person {
@Id @GeneratedValue
Long id;
String name;
@Version Long version;
}