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