首页 > 解决方案 > 如何在 MySql 中将实体作为 Json 持久化?

问题描述

我正在使用spring并将类hibernate持久 @Entity化到mysql数据库中。

对于一个属性,我想将对象作为一个StringJson字段持久化,而不是创建一个额外的表并使用@OneToOne引用映射或类似的东西。

仅以以下为例:

@Entity
public class Customer {

    //@JsonObject
    private List<Address> address;
}

public class Address {
    private String street, number, city, zip, country;
}

问题:我如何告诉休眠自动将该地址保存为字符串/json?当然,在读取字符串/json 时,应该将其重新映射到 Address 对象中。

标签: javamysqljsonspringhibernate

解决方案


您可以将 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 和一些其他辅助方法。


推荐阅读