JPA ENUM 사용법
jpa에서 enum을 사용할때 기본적으로 
1 2 3 4 5
   |  @Enumerated(EnumType.STRING) @Column(name = "jobtype") private JobType jobtype;
 
 
  | 
 
Enumerated 어너테이션을 사용하여 EnumType을 String으로 사용할건지 ORDINAL으로 사용할건지 선택을 한다.
여기서 코드와 맵핑시켜서 사용하면 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
   | 
  import static java.util.stream.Collectors.toMap;
  import java.util.Map; import java.util.Objects; import java.util.stream.Stream; import lombok.Getter; import lombok.extern.slf4j.Slf4j;
  @Slf4j public enum UseMode { 	IN_CAR_TIME(2, "입차시점기준"), 	MIDNIGHT(1, "자정기준");
  	private static final Map<Integer, UseMode> codeToEnum = 			Stream.of(values()).collect(toMap(UseMode::getCode, e -> e));
  	@Getter 	private Integer code; 	private String description;
  	UseMode(Integer code, String description) { 		this.code = code; 		this.description = description; 	}
  	public static UseMode fromCode(Integer symbol) { 		UseMode useMode = codeToEnum.get(symbol); 		if (Objects.isNull(useMode)) { 			log.error("잘못된 UseMode 타입입니다. UseMode = {}", symbol); 			throw new IllegalArgumentException("잘못된 UseMode 타입입니다."); 		} 		return useMode; 	}
  }
 
 
 
  | 
 
위와 같은 Enum을 만들어서 DB에는 code값이 들어가야 될때 converter를 선언해서 사용한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
   | 
  import javax.persistence.AttributeConverter; import javax.persistence.Converter; import kr.co.parkingcloud.local.integration.constants.UseMode;
  @Converter public class UseModeConverter implements AttributeConverter<UseMode, Integer> {
  	@Override 	public Integer convertToDatabaseColumn(UseMode useMode) { 		return useMode.getCode(); 	}
  	@Override 	public UseMode convertToEntityAttribute(Integer integer) { 		return UseMode.fromCode(integer); 	} }
 
 
 
  | 
 
AttributeConverter를 구현하면 간단하게 컨버터를 구현할수 있다.
1 2 3 4 5
   |  @Convert(converter = UseModeConverter.class) @Column(name = "use_mode") private UseMode useMode;
 
 
  | 
 
위에 처럼 지정해 주면 된다.
참조