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