-
JPA Enum Type (@Enumerated, EnumType)JPA 2023. 1. 25. 23:08
JPA는 Enum Type과 DB 매핑을 도와준다.
내가 사용한 경우는,
프로젝트에 알람 기능을 추가할 때, 알람의 타입을 구별하기 위해 Enum을 사용하였다.
@Entity @Getter @EqualsAndHashCode(of = "id") public class Notification { @Id @GeneratedValue private Long id; private String title; private String message; @ManyToOne private User user; @Enumerated private NotificationType notificationType;
Entity로 Enum 타입을 사용하고 싶다면 @Enumerated 어노테이션이 필요하다.
public enum NotificationType { CREATED, UPDATED, ENROLLMENT }
테스트로 알람 테이블에 데이터를 Insert 했을 때, 다음과 같이 DB에 추가된다.
@Enumerated의 디폴트 EnumType 값은 EnumType.ORDINAL로, Enum 타입의 값을 상수로 저장해준다.
만약, enum의 종류가 추가되거나 삭제된다면 컬럼값이 중복되어 맞지 않는 값이 들어갈 수도 있다.
이러한 문제점 때문에 반드시 ENUM 타입을 String으로 저장해주어야 한다.
@Enumerated(EnumType.STRING) private NotificationType notificationType;
이와 같이 지정해주면, DB에도 상수가 아닌 지정해준 타입의 이름으로 저장되어 EnumType의 순서가 바뀌어도 문제없이 사용할 수 있다.
'JPA' 카테고리의 다른 글
N+1 Select 문제 (0) 2023.02.14 @EntityGraph (0) 2023.02.14 @ManyToMany 사용 시 주의할 점 (List, Set) (0) 2023.01.25 JPA의 리턴타입이 Optional인 이유 (0) 2023.01.19