🚀 이 글은 아래의 우아한 형제들의 기술 블로그의 글을 구현해본 후기 입니다.
저희는 JPA에서 Enum 값을 저장하기 위해 아래와 같이 사용합니다.
// 주문의 상태 public enum OrderStatus { ACCEPTED, SHIPPED, CANCELED } // 주문 엔티티 @Entity public class Order { ... @Enumerated(EnumType.STRING) private OrderStatus orderStatus; ... }
ACCEPTED
를 그대로 저장하기 위해서 @Enumerated(EnumType.STRING)
를 사용하게 됩니다.하지만 아래와 같이 사용하고 싶다면 어떻게 해야 될까요?
@Getter public enum OrderStatus { ACCEPTED("승인완료", "1"), SHIPPED("배달완료", "2"), CANCELED("취소", "3"); ... }
위의 블로그 글은 DB에는
1
로 저장하고, 실제 사용은 ACCEPTED
를 할 수 있는 방법입니다.✨ 실제 구현한 코드들은 란에서 확인 가능합니다.
...코드를 작성 했다면? 👀
🏃 설정대로 되는지 테스트를 한번 해봅시다.
Order newOrder = new Order(randomUUID().toString(), now(), ACCEPTED, "둘리가 시킴"); @Test void testOrderStatusConverter() { EntityManager entityManager = emf.createEntityManager(); EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); entityManager.persist(newOrder); transaction.commit(); Order order = entityManager.find(Order.class, newOrder.getUuid()); log.info("Order: {}", order); log.info("Order status: {}", order.getOrderStatus()); }
설정을 하고나서 위의 테스트 코드를 실행 시켜보면 아래와 같은 로그를 볼 수 있습니다.

실제로 DB에서 등록 될 때는, Converter가 동작해서
1
이 들어간걸 볼 수 있고,
조회를 해서 객체의 값을 보면 OrderStatus 값이 설정된 모습을 볼 수 있습니다.