Как использовать библиотеку Hibernate Envers для аудита объектов JPA

Иногда нам нужно просмотреть историю данных объекта нашего приложения по разным причинам, например, чтобы выполнить требования соответствия, получить представление об эволюции их данных и т. д. Вместо того, чтобы внедрять собственное решение, мы можем использовать готовую библиотеку, которая включает функции аудита.

Envers — это модуль Hibernate, предоставляющий возможности аудита и управления версиями для сущностей. Это позволяет отслеживать изменения, которые произошли с течением времени. Он автоматически создает таблицы аудита для хранения исторических версий сущностей.

В этом руководстве я покажу вам, как включить Envers в приложение Spring Boot для отслеживания истории сущности.

Давайте начнем!

Демонстрация проекта

Я использую Maven в качестве инструмента сборки для этой демонстрации. Нам нужны следующие зависимости в pom.xml приложения:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
   <groupId>com.h2database</groupId>
   <artifactId>h2</artifactId>
   <scope>runtime</scope>
</dependency>

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
   <groupId>org.hibernate.orm</groupId>
   <artifactId>hibernate-envers</artifactId>
   <version>6.2.6.Final</version>
</dependency>

<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <optional>true</optional>
</dependency>
  • spring-boot-starter-data-jpa используется для управления объектами JPA.
  • spring-boot-starter-web включает возможности REST.
  • hibernate-envers используется для аудита сущностей.
  • com.h2database служит базой данных в памяти.
  • org.projectlombok устраняет необходимость в шаблонном коде.

Представьте, что у нас есть дом для домашних животных, и мы хотим собирать пожертвования для домашних животных. У нас есть таблица базы данных для отслеживания данных питомца, и мы хотим обновлять сумму пожертвования, когда кто-то отправляет деньги…