본문 바로가기
Spring Framework/JPA

@GeneratedValue 로 UUID 사용하기

by 도쿠니 2022. 6. 13.

 

참고용이기 때문에 간단하게 사용법하고 주의사항만 정리하겠습니다.

 

사용법

  • Entity
    • @GeneratedValue 어노테이션을 설정
    • @Column을 BINARY(16)으로
    • 타입을 UUID로
@Id
@GeneratedValue
@Column(columnDefinition = "BINARY(16)")
private UUID id;
  • 결과
    • UUID에서 대시(-)를 제외한 나머지 32자리 문자열이 자동생성되어 저장됩니다.

주의사항

  • @Column을 직접 BINARY(16)으로 정의한 이유는 디비마다 다르겠지만 JPA로 스키마 자동생성하면 컬럼타입이 BINARY(255)로 정의됩니다. 이러한 경우 UUID는 255를 제외한 16만큼의 자리를 차지하는데 자리를 채우고 남은 공간을 특정 값으로 채워버리는 DB가 존재할 수 있습니다.
    • 예를들어 MySQL같은 경우, 공백을 0으로 채워버리기 때문에 UUID00000000000이런식으로 저장됩니다. 
    • 이러한 오류를 방지하고자 UUID가 차지하는 크기인 BINARY(16)만큼을 크기로 설정해주는 것입니다.
  • 따로 Generator를 설정해서 사용하지 않고 @GeneratedValue만 적은 이유
    • 기본적으로 @GeneratedValue는 AUTO 전략을 선택합니다.
    • 아래의 그림과 같이 AUTO일 경우 Data Type이 UUID면 자동적으로 UUID Generator로 설정됩니다.

댓글