[java] Hibernate Envers를 사용하여 데이터 변경 로그를 어떻게 조회할 수 있나요?

먼저, Envers를 사용하기 위해서는 Hibernate ORM과 함께 Envers 디펜던시를 추가해야 합니다. Maven을 사용한다면, pom.xml 파일에 다음과 같이 의존성을 추가합니다.

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>{Hibernate 버전}</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-envers</artifactId>
    <version>{Hibernate 버전}</version>
</dependency>

Envers를 사용하여 데이터 변경 로그를 조회하는 방법은 크게 두 가지입니다.

  1. Entity의 변경 이력 조회 Envers는 엔티티 클래스에 대한 변경 이력을 자동으로 관리합니다. 특정 엔티티의 변경 이력을 조회하려면 AuditReader 인터페이스를 사용합니다. AuditReader를 통해 다음과 같은 메서드를 사용할 수 있습니다.

예를 들어, Book 엔티티의 변경 이력을 조회하려면 다음과 같이 작성할 수 있습니다.

AuditReader auditReader = AuditReaderFactory.get(entityManager);
List<Number> revisions = auditReader.getRevisions(Book.class, bookId);

for (Number revision : revisions) {
    Book book = auditReader.find(Book.class, bookId, revision);
    // 변경 이력에 대한 처리 로직 수행
}
  1. 전체 변경 이력 조회 Envers를 사용하면 애플리케이션에서 전체 변경 이력을 조회하는 것도 가능합니다. AuditQuery를 사용하여 다양한 검색 조건으로 변경 이력을 조회할 수 있습니다.

아래는 변경 이력을 전체 조회하는 예제입니다.

AuditReader auditReader = AuditReaderFactory.get(entityManager);
AuditQuery query = auditReader.createQuery().forRevisionsOfEntity(Book.class, false, true);
List results = query.getResultList();

for (Object result : results) {
    Object[] entityAndRevision = (Object[]) result;
    Book book = (Book) entityAndRevision[0];
    RevisionEntity revision = (RevisionEntity) entityAndRevision[1];
    // 변경 이력에 대한 처리 로직 수행
}

이렇게 Hibernate Envers를 사용하여 데이터 변경 이력을 조회할 수 있습니다. 더 자세한 내용은 Hibernate Envers의 공식 문서를 참고하시기 바랍니다. [^1^]