1. Spring 용어정리
- Enum to String
- Java에서 Enum을 다루는데, DB에 save할 때, String으로 바꿔주는 것을 말함
- Enum value를 문자열로 변환 할 수 있음
- toString()를 사용하는 것을 권장함
- String to Enum
- Java에서 DB에 저장된 String value를 Enum Class value로 Return 하는 방법을 말함
- Enum.valueof() ⇒ “Enum.class에 정적 Factory method로 구현된 valueOf(Enum.class, String) Method”를 이용하는 방법 중 하나임
- Enum.valueOf(만든Enum.class, Mapping String)
- 구현된 Enum.class에 Mapping할 String만 매개변수로 넘겨주어 사용할 수 도 있음
- 구현된 정적 Factory method안에서 null check, string value mapping에 대한 익셉션 처리가 구현되어 있음을 알 수 있음
- @Convert와 attributeConverter를 Inherit받는, Converter Class를 구현해서 받는 방법이 있음
- Enum to String, String to Enum Method를 정의하는 AttributeConverter Interface를 Inherit받는 Converter 구현체를 만드는 것임
- AttributeConverter ⇒ 어떠한 Class에도 Inherit되거나 Inherit 받지 않는 2개의 Method만을 위한 Interface임
- convertToDatabaseColumn(Menu menu) : enum을 DB에 어떤 값을 넣을 지를 정의함
- converToEntityAttribute(String menuName) : DB에서 읽힌 값에 따라 어떻게 enum과 매칭시킬 것인지를 정의함
- JPA에서 @Convert Annotation을 Entity의 Property에 적용하면, @Converter Annotation이 적용된 Class와 자동으로 Mapping되어 DB에 save된 varChar Data type을 Enum으로 Mapping시켜, Java에서 Enum Class로 핸들링 할 수 있게 해줌
- @Enumerated(EnumType.STRING) Annotation
- JPA는 enum Field에 @Enumerated(EnumType.STRING) Comment를 추가하면 Entity를 Save할 때 Enum.name() value를 사용하여 Mapping함
- JPA 2.1 version에는 @Enumerate를 사용하였고, 2.1 version 이후 @Convert를 사용하기 시작함
- @Enumerated는 선언한 상수의 이름이 바뀌게 되면 기존에 저장했던 Data와 정합성 문제가 있어 String으로 선언되어 필요 이상으로 많은 공산을 할당해야하는 문제점이 발생했었는데, JPA 2.1 이후 @Converter에서는 커버하기 위해 나옴