@Getter
public enum Menu {
BULGOGI_PIZZA(10000, "PIZZA"),
CHEESE_PIZZA(8000, "PIZZA"),
POTATO_PIZZA(11000, "PIZZA"),
;
}
해당 Menu enum을 이용해서 아래와 같은 entity를 구성했다
@Entity
@Table
@Getter
@NoArgsConstructor
public class Order {
...
@Column(name = "menu")
private Menu menu;
...
}
위와 같이 구성을 하고 entity를 DB에 저장할 경우 아래와 같이 내가 원하는 'BULGOGI_PIZZA', 'CHEESE_PIZZA', 'POTATO_PIZZA'와 같은 값이 DB에 들어가는 것이 아니라, 해당 값의 index가 DB에 저장된다.
8번 row처럼 POTATO_PIZZA처럼 메뉴 명이 저장되길 원하는데 아무 설정을 하지 않을 경우 CHEESE_PIZZA로 DB에 저장했을 때 위와 같이 CHEESE_PIZZA의 index 값이 DB에 저장된다.
enum의 값을 index가 아닌 텍스트 값 그대로 저장하고 싶을 때 위의 어노테이션을 아래와 같이 entity에서 column을 정의해주는 곳에 붙여주면, DB에 enum의 값 자체가 텍스트 그대로 저장이 된다.
기본 값은 @Enumerated(value = EnumType.ORDINAL) 또는 @Enumerated(EnumType.ORDINAL)
@Enumerated(value = EnumType.STRING) 또는 @Enumerated(EnumType.STRING) 으로 설정하게 될 경우 해당 enum의 name 즉, 값이 그대로 들어가지게 된다. 즉, DB에 enum name 값을 넣을 때는 위의 어노테이션을 이용해서 enum의 값이 텍스트 그대로 들어가지게 entity의 column에 어노테이션 설정을 해줘야 한다.