1.Map集合映射到数据库
借助AtrributeConverter
目前我的需求是将集合类中的信息存储到数据库中,例如有Map字段的formBody,最好是使用JSON格式,而SpringDateJpa也为我们提供了相关的方法,通过自定义对象转换器,并通过注解的形式对需要转换的字段进行标注即可。
该接口位于javax.persistence.AtrributeConverter。我们通过自定义类实现该接口重写其中的方法实现需要的功能,本次具体的实现如下:import com.alibaba.fastjson.JSONObject;
import javax.persistence.AttributeConverter;
/**
* @create :Created in 2021
* @description :Jpa映射转换器,存储时对象转JsonString, 读取时相反
*/
public class JpaConverterObjectJson implements AttributeConverter {
@Override
public String convertToDatabaseColumn(Object o) {
return o==null?null: JSONObject.toJSONString(o);
}
@Override
public Object convertToEntityAttribute(String s) {
return s==null?null:JSONObject.parseObject(s);
}
}
实体类中@Entity
@DynamicUpdate
@Data
public class Item extends BaseEntity
{
/** 物品主键 */
@Id
private Long itemId;
/** 源物品信息 */
private String sourceItemId;
/** 物品信息 */
@Convert(converter = JpaConverterObjectJson.class)
@Column(columnDefinition = "TEXT")
private Map itemInfo;
}
这样存的时候就是String,取出来自动为Map。
首先定一个一个convert,这里用阿里巴巴的fastjsonimport com.alibaba.fastjson.JSON;
import javax.persistence.AttributeConverter;
public class JpaConverterListJson implements AttributeConverter {
@Override
public String convertToDatabaseColumn(Object o) {
return JSON.toJSONString(o);
}
@Override
public Object convertToEntityAttribute(String s) {
return JSON.parseArray(s);
}
}
Entity里面的字段加上注解@Convert(converter = JpaConverterListJson.class)
@Column(columnDefinition = "TEXT")
private List writers;