Lewis's Tech Keep

[Spring Boot] Spring Hibernate Envers REV INFO 타입 변경 본문

JAVA/Spring

[Spring Boot] Spring Hibernate Envers REV INFO 타입 변경

Lewis Seo 2024. 6. 27. 00:26

Spring Hibernate Envers 사용 시 아무것도 설정하지 않고 사용 시 revisionId와 revision timestamp를 저장하는 revinfo라는 테이블이 있는데, 해당 테이블의 revisionId 값은 integer로 저장된다.

Dev 환경이라면 괜찮지만 Production 환경에서 Envers를 사용하고 있고 자주 기록하는 서버라면 Integer MAX값인 21억을 넘는 것은 현실이 될 수도 있다.

이런 경우 테이블이 이미 생성되어 있는 경우 마이그레이션과 함께
아래와 같이 CustomRevisionEntity를 준비해서 변경해주는 것이 좋다.

-- table seq type 변경
ALTER TABLE revinfo ALTER COLUMN rev TYPE BIGINT USING rev::bigint;  
-- 연관 column rev id type 변경
ALTER TABLE table_a_aud ALTER COLUMN rev TYPE BIGINT USING rev::bigint;
ALTER TABLE table_b_aud ALTER COLUMN rev TYPE BIGINT USING rev::bigint;
ALTER TABLE table_c_aud ALTER COLUMN rev TYPE BIGINT USING rev::bigint;
-- postgresql 경우 seq 로 id 관리하고 있기 때문에 해당 sequence type 변경
ALTER SEQUENCE revinfo_rev_seq AS BIGINT;
@Entity  
@Getter  
@Table(name = REVISION_TABLE)  
@RevisionEntity  
public class CustomRevisionEntity implements Serializable {  

  @Id  
  @RevisionNumber  @GeneratedValue(strategy = GenerationType.IDENTITY)  
  private Long rev;  

  @RevisionTimestamp  
  private long revTimestamp;  
}
Comments