사용자 도구

사이트 도구


java:hibernate:envers

Hibernate Envers

  • Hibernate/JPA Entity의 변경 사항을 추적할 수 있게 별도 테이블에 변경 사항을 자동 저장해준다.
  • Spring Data Envers Hibernate Envers 의 변경 사항을 쉽게 조회할 수 있게 해준다.

REV 를 long 으로 변경해야한다

  • 이력이 쌓일 때 이력의 값을 REV라는 컬럼으로 저장하는데 이 값이 int 타입이다.
  • 이 경우 약 20억 이상의 이력이 쌓이면 곧바로 오류가 발생하게 된다.
  • REVINFO 테이블의 REV 컬럼과, 각 이력 테이블의 REV 컬럼을 모두 Long type 즉 BIGINT로 변경해야만 한다.
  • @RevisionEntity를 커스텀으로 새로 만들어야 한다.
@Entity
@RevisionEntity
public class CustomRevisionEntity implements Serializable {
  @Id
  @GeneratedValue
  @RevisionNumber
  private long rev;
  @RevisionTimestamp
  private long timestamp;
  /* provide getter/setters */
}

Custom @RevisionEntity

ToOne 관계의 join column audit

If you want to audit a relation, where the target entity is not audited (that is the case for example with dictionary-like entities, which don't change and don't have to be audited), just annotate it with @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED). Then, when reading historic versions of your entity, the relation will always point to the “current” related entity.
  • 관계맺은 엔티티 자체는 audit 하지 않고, join column 값의 변화면 검사하고자 한다면 관계 매핑에 @Audited(targetAuditMode = RelationTargetAuditMode.NOT_AUDITED) 사용.

참조

java/hibernate/envers.txt · 마지막으로 수정됨: 2021/04/29 16:53 저자 kwon37xi