====== Hibernate Envers ====== * [[http://envers.jboss.org/|Envers]] * Hibernate/JPA Entity의 변경 사항을 추적할 수 있게 별도 테이블에 변경 사항을 자동 저장해준다. * [[https://spring.io/projects/spring-data-envers|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 */ } * [[https://github.com/hibernate/hibernate-orm/blob/master/hibernate-envers/src/main/java/org/hibernate/envers/DefaultRevisionEntity.java|DefaultRevisionEntity.java''를 복사해서 ''REV''만 ''long''으로 변경하면 된다. * [[https://stackoverflow.com/questions/38589065/hibernate-envers-rev-column-data-type-is-integer|Hibernate Envers rev column data type is Integer]] * [[https://hibernate.atlassian.net/browse/HHH-6615|[HHH-6615] int type in Revision number - Hibernate JIRA]] ===== Custom @RevisionEntity ===== * ''@RevisionEntity''를 커스터마이징 하여 원하는 데이터를 추가 저장할 수도 있다. * [[https://thoughts-on-java.org/hibernate-envers-extend-standard-revision/|Hibernate Envers - Extend the standard revision]] ===== 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)'' 사용. ===== 참조 ===== * [[https://www.youtube.com/watch?v=fGPaj-rlN5w&feature=youtu.be|스프링캠프 2017 [Day2 A5] : 엔티티 히스토리를 편리하게 관리해주는 스프링 데이터 Envers]] * [[https://www.youtube.com/watch?v=aPGLwjCHWvI|Getting Started with Hibernate Envers - YouTube]] * [[http://www.javabeat.net/hibernate-envers/|Introduction to Hibernate Envers]] * [[http://haviyj.tistory.com/40|Spring Boot + Envers로 엔티티 이력관리하기]] * [[https://mayaul.github.io//envers/|hibernate envers 사용하기 – Mayaul]] * [[https://blog.leocat.kr/notes/2021/04/23/hibernate-envers-settings|[Hibernate Envers] Hibernate Envers 사용할 때 필요한 이런 저런 설정들]]