사용자 도구

사이트 도구


java:hibernate:envers

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:hibernate:envers [2018/12/11 15:24]
kwon37xi
java:hibernate:envers [2021/04/29 16:53] (현재)
kwon37xi
줄 1: 줄 1:
 ====== Hibernate Envers ====== ====== Hibernate Envers ======
   * [[http://envers.jboss.org/|Envers]]   * [[http://envers.jboss.org/|Envers]]
-  * Hibernate audit+  * 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''를 커스텀으로 새로 만들어야 한다. 
 +<code java> 
 +@Entity 
 +@RevisionEntity 
 +public class CustomRevisionEntity implements Serializable { 
 +  @Id 
 +  @GeneratedValue 
 +  @RevisionNumber 
 +  private long rev; 
 +  @RevisionTimestamp 
 +  private long timestamp; 
 +  /* provide getter/setters */ 
 +
 +</code> 
 +  * [[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]]   * [[https://www.youtube.com/watch?v=aPGLwjCHWvI|Getting Started with Hibernate Envers - YouTube]]
   * [[http://www.javabeat.net/hibernate-envers/|Introduction to Hibernate Envers]]   * [[http://www.javabeat.net/hibernate-envers/|Introduction to Hibernate Envers]]
   * [[http://haviyj.tistory.com/40|Spring Boot + 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 사용할 때 필요한 이런 저런 설정들]]
java/hibernate/envers.1544509468.txt.gz · 마지막으로 수정됨: 2018/12/11 15:24 저자 kwon37xi