자바 Enum타입을 엔티티 클래스의 속성으로 사용할 수 있다.
- EnumType.ORDINAL : enum 순서 값을 DB에 저장
- EnumType.STRING : enum 이름을 DB에 저장
예시)
public enum UserRole {
USER, ADMIN
}
@Enumerated(EnumType.ORDINAL)
private UserRole role;
- 선언된 순서대로 Integer값으로 변환하여 저장된다. USER는 0으로, ADMIN은 1로 저장이 된다.
- USER (일반회원), SILVER_USER (우수회원), ADMIN (관리자)와 같이 중간에 값이 추가되거나 없어진다면 값을 예측할 수 없으므로 사용하지 않는 것이 좋다.
@Enumerated(EnumType.STING)
private UserRole role;
- "USER", "ADMIN" 문자열 자체가 저장된다.
- 저장된 Enum의 순서가 바뀌거나, 추가되어도 안전하다.
- 문자열 자체가 저장되기 때문에 ORDINAL에 비해 데이터 크기가 크다
💡 JPA2.1 부터 도입된 @Converter를 사용하는 것을 추천한다고 하는데 ENUM의 길이가 길지 않고, 최근 DB의 성능도 좋아져 @Converter를 사용해 최적화해도 크게 많은 이점을 얻지는 못한다고 한다.