问题
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;
}
本文探讨了在使用JPA时遇到的问题,即如何将List对象转换为String存储到MySQL数据库中。针对不同类型的List内容,如自定义对象Point(表示位置坐标)和基本数据类型集合,提出了使用数据类型转换和自定义转换器的方法。在POJO类中定义转换器可以避免Hibernate为集合创建单独的表,确保数据正确存储。
1693

被折叠的 条评论
为什么被折叠?



