java - 如何在 MySql 中将实体作为 Json 持久化?
问题描述
我正在使用spring
并将类hibernate
持久 @Entity
化到mysql
数据库中。
对于一个属性,我想将对象作为一个String
或Json
字段持久化,而不是创建一个额外的表并使用@OneToOne
引用映射或类似的东西。
仅以以下为例:
@Entity
public class Customer {
//@JsonObject
private List<Address> address;
}
public class Address {
private String street, number, city, zip, country;
}
问题:我如何告诉休眠自动将该地址保存为字符串/json?当然,在读取字符串/json 时,应该将其重新映射到 Address 对象中。
解决方案
您可以将 json 存储到 mySQL 表中:
CREATE TABLE `book` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(200) NOT NULL,
`tags` json DEFAULT NULL,
PRIMARY KEY (`id`)
)
插入查询:
INSERT INTO `book` (`title`, `tags`)
VALUES (
'ECMAScript 2015: A SitePoint Anthology',
'["JavaScript", "ES2015", "JSON"]'
);
在休眠中,您应该创建必须实现 org.hibernate.usertype 的类(如“com.test.MyJsonType”)。UserType 接口,其中 nullSafeGet 方法应将 JSON 反序列化为 java 对象(使用 Jackson),nullSafeSet 将 POJO 序列化为 JSON 和一些其他辅助方法。
推荐阅读
- pycharm - Pycharm/Pytorch:查找 nn.Module.forward 的用法
- python - 为什么 IDLE 中的 Pandas 需要这么长时间才能导入?
- r - 预测销售和寻找手段
- excel - VBA根据列中的单元格条件从不同的文件夹中打开多个文件
- java - 如何拦截放心响应验证失败
- python-3.x - Python 忽略缩进并继续在 VSCode 中作为类的一部分运行代码
- php - odbc 是无效的数据源名称
- python-3.x - 使用 TF-IDF 或 Word2Vec 从职位描述中提取技能
- javascript - 如何使用带有 formControlName 的 ion-radio
- angular - 将 Angular2+ 集成到 ASP.Net MVC 4 中的最佳方法