Enum Converter 사용기

midas·2022년 5월 15일
0

🚀 이 글은 아래의 우아한 형제들의 기술 블로그의 글을 구현해본 후기 입니다.

Legacy DB의 JPA Entity Mapping (Enum Converter 편) | 우아한형제들 기술블로그

저희는 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 를 할 수 있는 방법입니다.

✨ 실제 구현한 코드들은 [Git-Commit] 란에서 확인 가능합니다.

...코드를 작성 했다면? 👀
🏃 설정대로 되는지 테스트를 한번 해봅시다.

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 값이 설정된 모습을 볼 수 있습니다.

profile
BackEnd 개발 일기

0개의 댓글