共计 1531 个字符,预计需要花费 4 分钟才能阅读完成。
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
@Data
public 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 等汇合类型映射到数据库的问题
正文完
发表至: spring-data-jpa
2021-01-28