spring boot/snippets
jpa에서 json column 사용하기
lingi04
2021. 12. 22. 23:14
list형 json
custom converter 사용
import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import javax.persistence.AttributeConverter; import java.io.IOException; import java.util.List; public class StringListConverter implements AttributeConverter<List, 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<String> attribute) { try { return mapper.writeValueAsString(attribute); } catch (JsonProcessingException e) { throw new IllegalArgumentException(); } } @Override public List<String> convertToEntityAttribute(String dbData) { try { return mapper.readValue(dbData, List.class); } catch (IOException e) { throw new IllegalArgumentException(); } } }
엔티티에 json column 정의하기
@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 = StringListConverter.class) @Column(columnDefinition = "json") private List<String> tickerList; }