SpringBoot 3.0에서 @Type(type ="..")의 변경

jihunnit·2023년 1월 17일
0

TIL

목록 보기
8/19

요 며칠 간 개인적은 프로젝트를 진행하면서
Redis를 적용하고자 노력하고 있다.

물론 쉬운듯 어려워서 예상외로 머리를 쥐어박고 있지만
여하튼 각설하고 넘어가자면,

Entity의 id를 UUID로 하시는 분들이 있을 것이라 생각한다.
보통 다들 이렇게 구현 하실 것이라 생각한다

@Id 
@Column(name = "post_id", columnDefinition = "BINARY(16)")
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
private UUID id;

근데 나는 이렇게 하면, 코드가 DB에 제대로 저장이 안되는지
post_id를 @PathVariable 에서 String으로 받아서, 변환을 하면
IllegalArgumentException이 발생했다.
제대로 uuid가 변환되지 않음을 확인하고, 다른 방안을 강구하다가 uuid를 문자 형태로 저장하는 방식이 있다는것을 확인했다.
이런 식이다.

@Id @Column(name = "post_id")
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@Type(type = "uuid-char")
private UUID id;

그래서 이걸 적용하려고 신나게 코드를 쳤는데
@Type 어노테이션에서는 눈 씻고 찾아봐도
type=" "..을 확인할 수 없었다.
어찌 된 일인지 찾아보았는데..아무래도
Spring Boot 3.0부터는 저 옵션이 사라진 듯 하다.

어떻게 하면 좋을지 여러가지로 찾아봤고
스택 오버플로우의 한 게시글에서 해결책을 찾았다.

@Id @Column(name = "post_id")
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@JdbcTypeCode(SqlTypes.VARCHAR)
private UUID id;

이런 식으로, @JdbcTypeCode(SqlTypes.VARCHAR)를 붙여주자 db에 저장될 떄도 그렇고, PathVariable로 주고 받을 떄도 그렇고, 정상적으로 작동함을 확인하였다.

profile
인간은 노력하는 한 방황한다

0개의 댓글