如何使用JPA和Hibernate将MySQL JSON列映射到Java实体属性
发布于 2021-01-30 17:18:04
我将MySQL列声明为 JSON 类型,并且在使用Jpa / Hibernate映射时遇到问题。我在后端使用Spring Boot。
这是我的代码的一小部分:
@Entity
@Table(name = "some_table_name")
public class MyCustomEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "json_value")
private JSONArray jsonValue;
该程序返回一个错误,并告诉我无法映射该列。
在mysql表中,该列定义为:
json_value JSON NOT NULL;
关注者
0
被浏览
110
1 个回答
-
我更喜欢这样:
- 创建从Map到String的转换器(属性转换器),反之亦然。
- 使用Map映射域(实体)类中的mysql JSON列类型
代码在下面。
JsonToMapConverted.java
@Converter public class JsonToMapConverter implements AttributeConverter<String, Map<String, Object>> { private static final Logger LOGGER = LoggerFactory.getLogger(JsonToMapConverter.class); @Override @SuppressWarnings("unchecked") public Map<String, Object> convertToDatabaseColumn(String attribute) { if (attribute == null) { return new HashMap<>(); } try { ObjectMapper objectMapper = new ObjectMapper(); return objectMapper.readValue(attribute, HashMap.class); } catch (IOException e) { LOGGER.error("Convert error while trying to convert string(JSON) to map data structure."); } return new HashMap<>(); } @Override public String convertToEntityAttribute(Map<String, Object> dbData) { try { ObjectMapper objectMapper = new ObjectMapper(); return objectMapper.writeValueAsString(dbData); } catch (JsonProcessingException e) { LOGGER.error("Could not convert map to json string."); return null; } } }
域(实体映射)类的一部分
... @Column(name = "meta_data", columnDefinition = "json") @Convert(attributeName = "data", converter = JsonToMapConverter.class) private Map<String, Object> metaData = new HashMap<>(); ...
该解决方案非常适合我。