構成
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.3.1</version>
</dependency>
</dependencies>
これにより、hibernate-envers
が一時的な依存関係としてプロジェクトに組み込まれます。
Spring Data Envers と Spring Data JPA を有効にするには、2 つの 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 を使用するには、拡張インターフェースとして追加して 1 つ以上のリポジトリを RevisionRepository
(Javadoc) に作成します。
interface PersonRepository
extends CrudRepository<Person, Long>,
RevisionRepository<Person, Long, Long> (1)
{}
1 | 最初の型パラメーター(Person )はエンティティ型を示し、2 番目(Long )は id プロパティの型を示し、最後の型パラメーター(Long )はリビジョン番号の型を示します。デフォルト構成の Envers の場合、リビジョン番号パラメーターは Integer または Long である必要があります。 |
そのリポジトリのエンティティは、Envers 監査が有効になっているエンティティである必要があります(つまり、@Audited
アノテーションが必要です)。
@Entity
@Audited
class Person {
@Id @GeneratedValue
Long id;
String name;
@Version Long version;
}