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<Object, String> {    @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@Datapublic class Item extends BaseEntity{   /** 物品主键 */ @Id private Long itemId; /** 源物品信息 */ private String sourceItemId; /** 物品信息 */ @Convert(converter = JpaConverterObjectJson.class)   @Column(columnDefinition = "TEXT")   private Map<String,Object> itemInfo;}

这样存的时候就是String,取出来主动为Map。

2.主动转换LIST为JSON并存储到MYSQL 的STRING

首先定一个一个convert,这里用阿里巴巴的fastjson

import com.alibaba.fastjson.JSON;import javax.persistence.AttributeConverter;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);    }}

Entity外面的字段加上注解

@Convert(converter = JpaConverterListJson.class)    @Column(columnDefinition = "TEXT")    private List<Person> writers;

5.附录
Hibernate4学习总结(4)--注解模式的汇合映射,关联关系映射
主动转换LIST为JSON并存储到MYSQL 的STRING
解决SpringJpa将Map等汇合类型映射到数据库的问题