@Convert vs @JoinTable

문제의 상황

image.png


@Convert가 무엇이고, 어떻게 사용할까 ?

// ConditionDetailsRecord.java
@Entity
@Getter
@Table(name = "condition_details_record")
public class ConditionDetailsRecord {

    @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "condition_details_record_id")
    private Long id;
    
    private LocalDate recordAt;

    @Convert(converter = CommonConditionConverter.class)
    @Column(name = "common_conditions") // ['어지러움']
    private List<CommonCondition> commonConditionList;

장단점

사용법

코드 설명

// CommonConditionConverter.java
package inatools.backend.converter;

import inatools.backend.domain.CommonCondition;
import jakarta.persistence.AttributeConverter;
import jakarta.persistence.Converter;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@Converter
public class CommonConditionConverter implements AttributeConverter<List<CommonCondition>, String> {

    @Override
    public String convertToDatabaseColumn(List<CommonCondition> attribute) {
        if (attribute == null || attribute.isEmpty()) {
            return "";
        }
        return attribute.stream()
                .map(Enum::name)
                .collect(Collectors.joining(","));
    }

    @Override
    public List<CommonCondition> convertToEntityAttribute(String dbData) {
        if (dbData == null || dbData.isEmpty()) {
            return List.of();
        }
        return Arrays.stream(dbData.split(","))
                .map(CommonCondition::valueOf)
                .collect(Collectors.toList());
    }

}