具有 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的主要内容,如果未能解决你的问题,请参考以下文章