当前位置:网站首页>jpa + MySQL list转String存入数据库

jpa + MySQL list转String存入数据库

2022-06-10 11:03:00 andQVQ

文章目录

问题

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

思考

  • list中存放的自定义对象为Point等一类位置坐标,可以使用POINT、MULTIPOINT等空间类型的字段
    MySQL数据类型

  • 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;
}

原网站

版权声明
本文为[andQVQ]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_40776361/article/details/125168958