spring boot/snippets

entity에 enum list 정의하기

lingi04 2021. 12. 22. 23:13

entity에 enum list를 정의하고 싶을 때 사용!

1. enum 생성

public enum IndicatorReportType {
    ROE, TOTAL_REVENUE, TOTAL_EQUITY
}

2. Converter를 만들고

public class ReportListConverter implements AttributeConverter<List<IndicatorReportType>, String> {
    private static final ObjectMapper mapper = new ObjectMapper()
        .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
        .configure(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES, false);

    @Override
    public String convertToDatabaseColumn(List<IndicatorReportType> attribute) {
        try {
            return mapper.writeValueAsString(attribute);
        } catch (JsonProcessingException e) {
            throw new IllegalArgumentException();
        }
    }

    @Override
    public List<IndicatorReportType> convertToEntityAttribute(String dbData) {
        try {
            return mapper.readValue(dbData, new TypeReference<>() {
            });
        } catch (IOException e) {
            throw new IllegalArgumentException();
        }
    }
}

3. entity에 정의하고 사용!

@Getter
@Entity
@Table(name = "favorites")
@Builder
@AllArgsConstructor(access = AccessLevel.PROTECTED)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Favorites {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    ...

    @Convert(converter = ReportListConverter.class)
    private List<IndicatorReportType> indicatorReportList;
}