How to map an ArrayList of primitives to a single column?

前端 未结 4 2074
没有蜡笔的小新
没有蜡笔的小新 2020-12-31 11:02

Let\'s say I have the following situation:

Object Car has an ArrayList of prices, which are all numbers. Is it possible in Hibernate to save all the prices in a sin

4条回答
  •  谎友^
    谎友^ (楼主)
    2020-12-31 11:46

    I know this is an old question but for anyone trying to do this in a JPA context you can do this

    import org.apache.commons.lang3.StringUtils;
    import javax.persistence.AttributeConverter;
    import javax.persistence.Converter;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.stream.Collectors;
    import java.util.stream.Stream;
    import java.util.Collections;
    
    @Converter
    public class IntArrayToStringConverter implements AttributeConverter,String>{
        @Override
        public String convertToDatabaseColumn(List attribute) {
            return attribute == null ? null : StringUtils.join(attribute,",");
        }
    
        @Override
        public List convertToEntityAttribute(String dbData) {
            if (StringUtils.isBlank(dbData))
                return Collections.emptyList();
    
            try (Stream stream = Arrays.stream(dbData.split(","))) {
                return stream.map(Integer::parseInt).collect(Collectors.toList());
            }
        }
    }
    

    Then to use it something like this in your entity

    @Entity
    public class SomeEntity
    {
    
       @Id
       @GeneratedValue(strategy = GenerationType.IDENTITY)
       private Integer id;
    
       @Column
       @Convert(converter = IntArrayToStringConverter.class)
       private List integers;
    
       ...
    }
    

提交回复
热议问题