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