具有 Mysql JSON 类型的 Spring Data

Posted

技术标签:

【中文标题】具有 Mysql JSON 类型的 Spring Data【英文标题】:Spring Data with Mysql JSON type 【发布时间】:2017-01-12 00:59:10 【问题描述】:

我们在项目中使用带有 JPA 的 spring 数据。 出 mysql 服务器版本是 5.7。

我有两个问题:

1) spring 数据是否与将对象持久化到 MySQL db 上的新 JSON 类型兼容?换句话说,我希望有一个实体,而不是在其表中有多个列 - 它将包含一个 JSON 类型的列。

2) spring 数据存储库是否与这种机制兼容?例如(通过存储库接口为 CRUD 操作自动生成代码)?

【问题讨论】:

【参考方案1】:

根据Spring Data Docs Appendix D: Repository query return types,唯一支持的类型是:void、primitives、Wrapper types、T、Iterator、Collection、List、Optional、Stream、Future、CompletableFuture、ListenableFuture、Slice、Page、GeoResult、GeoResults、GeoPage。

如您所见,目前尚不支持。其背后的一个想法我认为这还不是所有数据库的常识

显然,您可以将此存储用作 Json,并为其创建转换器:

  @Column(name = "configuration", nullable = false)
  @Convert(converter = PluginAnalyzerConfigConverter.class)
  private PluginAnalyzerConfig configuration;

和:

public class PluginAnalyzerConfigConverter implements
    AttributeConverter<PluginAnalyzerConfig, String> 

  @Override public String convertToDatabaseColumn(PluginAnalyzerConfig config) 
    Gson parser = new Gson();
    return parser.toJson(config, PluginAnalyzerConfig.class);
  

  @Override public PluginAnalyzerConfig convertToEntityAttribute(String source) 
    Gson parser = new Gson();
    return parser.fromJson(source, PluginAnalyzerConfig.class);
  

显然,如果没有这种方法,您将无法像 MySQL 那样以一种很好的方式使用 Json。但是我认为如果你创建 MySQL 专门的查询来使用它是没有问题的。

【讨论】:

以上是关于具有 Mysql JSON 类型的 Spring Data的主要内容,如果未能解决你的问题,请参考以下文章

表上的 PHP PDO 查询错误具有 json 数据类型(MySQL 5.7.8-rc)

MySQL数据类型 - JSON数据类型

MySQL 选择 JSON 字段属性具有值的位置

好文分享MySQL JSON 数据类型解说

Spring Boot休眠类型异常创建带有JSON字段的表

MySQL数据类型 - JSON数据类型