Spring/데이터 액세스 계층

[JPA] StringListConverter, CSV 형식 저장

한비Skyla 2025. 3. 10. 17:14
import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

@Converter
public class StringListConverter implements AttributeConverter<List<String>, String> {
    private static final String SPLIT_CHAR = ",";

    @Override
    public String convertToDatabaseColumn(List<String> attribute) {
        if(attribute == null || attribute.isEmpty()){
            return "";
        }
        return String.join(SPLIT_CHAR, attribute);
    }

    @Override
    public List<String> convertToEntityAttribute(String dbData) {
        if(dbData == null || dbData.trim().isEmpty()){
            return Collections.emptyList();
        }
        return Arrays.asList(dbData.split(SPLIT_CHAR));
    }
}

 

 

import javax.persistence.Column;
import javax.persistence.Convert;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.List;

@Entity
public class MyEntity {

    @Id
    private Long id;

    @Column(name = "list_column")
    @Convert(converter = StringListConverter.class)
    private List<String> listColumn;

    // getters and setters
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public List<String> getListColumn() {
        return listColumn;
    }
    public void setListColumn(List<String> listColumn) {
        this.listColumn = listColumn;
    }
}

 

 

https://green-bin.tistory.com/106

 

JPA - 하나의 컬럼에 여러 개의 데이터를 저장하기

배경 프로젝트를 진행하면서 인스타그램의 Feed와 같은 기능을 구현중이었다. Feed에는 여러 장의 Image를 업로드할 수 있다. MultiPartFile로 전달 받은 Image들은 S3에 저장된 후 S3에 저장된 url을 String

green-bin.tistory.com