如何使用JPA将映射JSON列映射到Java对象
我们有一张有很多列的大桌子。移至MySQL Cluster后,由于以下原因无法创建表:
错误1118(42000):行大小太大。不包括BLOB在内的已使用表类型的最大行大小为14000。这包括存储开销,请查阅手册。您必须将某些列更改为TEXT或BLOB
举个例子:
@Entity @Table (name = "appconfigs", schema = "myproject")
public class AppConfig implements Serializable
{
@Id @Column (name = "id", nullable = false)
@GeneratedValue (strategy = GenerationType.IDENTITY)
private int id;
@OneToOne @JoinColumn (name = "app_id")
private App app;
@Column(name = "param_a")
private ParamA parama;
@Column(name = "param_b")
private ParamB paramb;
}
这是用于存储配置参数的表。我在想,我们可以将一些列合并为一个列,并将其存储为JSON对象,然后将其转换为Java对象。
例如:
@Entity @Table (name = "appconfigs", schema = "myproject")
public class AppConfig implements Serializable
{
@Id @Column (name = "id", nullable = false)
@GeneratedValue (strategy = GenerationType.IDENTITY)
private int id;
@OneToOne @JoinColumn (name = "app_id")
private App app;
@Column(name = "params")
//How to specify that this should be mapped to JSON object?
private Params params;
}
我们定义的位置:
public class Params implements Serializable
{
private ParamA parama;
private ParamB paramb;
}
通过使用此方法,我们可以将所有列合并为一个并创建表。或者我们可以将整个表拆分为几个表。我个人更喜欢第一个解决方案。
无论如何,我的问题是如何映射Params列,该列是文本并包含Java对象的JSON字符串?
-
您可以使用JPA转换器将您的实体映射到数据库。只需在您的params字段中添加与此注释相似的注释:
@Convert(converter = JpaConverterJson.class)
然后以类似的方式创建类(这将转换通用对象,您可能希望对其进行专门化):
@Converter(autoApply = true) public class JpaConverterJson implements AttributeConverter<Object, String> { private final static ObjectMapper objectMapper = new ObjectMapper(); @Override public String convertToDatabaseColumn(Object meta) { try { return objectMapper.writeValueAsString(meta); } catch (JsonProcessingException ex) { return null; // or throw an error } } @Override public Object convertToEntityAttribute(String dbData) { try { return objectMapper.readValue(dbData, Object.class); } catch (IOException ex) { // logger.error("Unexpected IOEx decoding json from database: " + dbData); return null; } } }
就是这样:您可以使用此类将表中的任何对象序列化为json。
-
如何使用JPA和Hibernate将MySQL JSON列映射到Java实体属性
2021-01-30 关注 0 浏览110 1答案
-
将JPA实体的JSON字符串列自动映射到Java对象
2021-01-31 关注 0 浏览229 1答案
-
将JSON数据映射到Java对象
2021-01-30 关注 0 浏览109 1答案
-
将json映射到Java对象的最佳方法
2021-01-30 关注 0 浏览83 1答案
-
使用Jersey / JAXB / Jackson将Java.util.Map映射到JSON对象
2021-01-31 关注 0 浏览74 1答案
-
如何将JSON映射到C#对象
2021-01-31 关注 0 浏览137 1答案
-
如何使用JPA / Hibernate批注将MySQL char(n)列映射到实例变量?
2021-02-01 关注 0 浏览94 1答案
-
如何将JSON映射到Java模型类
2021-01-30 关注 0 浏览87 1答案
-
将JSON映射到类对象
2021-01-31 关注 0 浏览137 1答案
-
将JSON对象映射到Hibernate实体
2021-02-01 关注 0 浏览135 1答案