jpa + MySQL list转String存入数据库

问题

list通过jpa直接存入数据库会报错这里需要进行转换

思考

    list中存放的自定义对象为Point等一类位置坐标,可以使用POINT、MULTIPOINT等空间类型的字段 list中存放的是基本数据或者自定义基本数据的集合 在POJO类中定义转换器
@Entity
@Data
public class MyClass{
          
   
    @Convert(converter = JpaConverterListJson.class)
    private List<MyList> positions;
}

对于List中为基本类型的数据,使用的转换方式

import com.alibaba.fastjson.JSON;
import javax.persistence.AttributeConverter;
/**
 * @ClassName JpaConverterListJson
 * @Description jpa list转换为test 相互转换工具类
 * @Author ygt
 * @Date 2021/3/3 14:49
 * @Version V1.0
 */
public class JpaConverterListJson  implements AttributeConverter<Object, String> {
          
   
    @Override
    public String convertToDatabaseColumn(Object o) {
          
   
        return JSON.toJSONString(o);
    }

    @Override
    public Object convertToEntityAttribute(String s) {
          
   
        return JSON.parseArray(s);
    }
}

对于List中为基本类型集合的数据,使用的转换方式

import com.alibaba.fastjson.JSON;
import javax.persistence.AttributeConverter;
/**
 * @ClassName JpaConverterListJson
 * @Description jpa list转换为test 相互转换工具类
 * @Author ygt
 * @Date 2021/3/3 14:49
 * @Version V1.0
 */
public class JpaConverterListJson  implements AttributeConverter<List<MyList>, String> {
          
   
    @Override
    public String convertToDatabaseColumn(List<MyList> o) {
          
   
        return JSON.toJSONString(o);
    }

    @Override
    public List<MyList> convertToEntityAttribute(String s) {
          
   
        return JSON.parseArray(s, MyList.class);
    }
}

这样就可以在数据库中存入List转换的Json数据

P.S. 在POJO类中定义转换器时,如果使用注解@ElementCollection,Hibernate在存储数据时会自动为该集合单独创建一张表,这个表包含一个指向该属性所在类ID的外键。

@Entity
@Data
public class MyClass{
          
   
    @Convert(converter = JpaConverterListJson.class)
    @ElementCollection
    private List<MyList> positions;
}
经验分享 程序员 微信小程序 职场和发展