Hibernate Envers는 Hibernate ORM과 통합되어 데이터 변경 로그를 저장하고 조회하는 기능을 제공합니다. 이를 통해 애플리케이션의 데이터 변경 이력을 추적하고, 필요한 경우 과거 데이터를 조회할 수 있습니다.
먼저, Hibernate Envers를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 종속성을 추가합니다:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-envers</artifactId>
<version>5.5.7.Final</version>
</dependency>
데이터 변경 로그를 저장하기 위해, 엔티티 클래스에 @Audited
어노테이션을 추가합니다. 이 어노테이션은 해당 엔티티의 변경 이력을 추적하도록 설정합니다.
@Entity
@Audited
public class Product {
// 엔티티 필드 및 메소드 정의
}
이제 애플리케이션에서 데이터를 변경할 때마다 Hibernate Envers가 변경 로그를 자동으로 저장합니다. 변경된 데이터는 Envers 내부의 히스토리 테이블에 저장됩니다.
데이터 변경 로그를 조회하기 위해, AuditReader
를 사용합니다. AuditReader
는 Hibernate Envers에서 제공하는 인터페이스로, 특정 엔티티의 변경 이력 정보를 조회하는 메소드를 제공합니다.
AuditReader auditReader = AuditReaderFactory.get(entityManager);
// 특정 엔티티의 최신 버전 조회
Product product = auditReader.find(Product.class, productId, RevisionType.ADD);
// 특정 엔티티의 모든 변경 로그 조회
List<Number> revisions = auditReader.getRevisions(Product.class, productId);
for (Number revision : revisions) {
Product previousProduct = auditReader.find(Product.class, productId, revision);
// 이전 버전의 엔티티 정보를 사용하여 작업
}
위의 예제 코드에서 entityManger
는 Hibernate의 EntityManager
객체입니다. 이를 사용하여 AuditReader
인스턴스를 생성합니다.
find
메소드를 사용하여 특정 엔티티의 최신 버전이나 특정 버전의 엔티티를 조회할 수 있습니다. getRevisions
메소드는 특정 엔티티의 모든 변경 로그 버전을 조회합니다.
이렇게 Hibernate Envers를 활용하여 데이터 변경 로그를 저장하고 조회할 수 있습니다. 추가적인 설정이나 사용 방법에 대한 자세한 내용은 Hibernate Envers 공식 문서를 참조하시기 바랍니다.
참고 문서:
- Hibernate Envers 공식 문서: https://docs.jboss.org/hibernate/orm/5.5/userguide/html_single/Hibernate_User_Guide.html#envers