【问题标题】:Spring Data with Mysql JSON type具有 Mysql JSON 类型的 Spring Data
【发布时间】:2017-01-12 00:59:10
【问题描述】:
我们在项目中使用带有 JPA 的 spring 数据。
出 MySQL 服务器版本是 5.7。
我有两个问题:
1) spring 数据是否与将对象持久化到 MySQL db 上的新 JSON 类型兼容?换句话说,我希望有一个实体,而不是在其表中有多个列 - 它将包含一个 JSON 类型的列。
2) spring 数据存储库是否与这种机制兼容?例如(通过存储库接口为 CRUD 操作自动生成代码)?
【问题讨论】:
标签:
java
mysql
json
spring
spring-data
【解决方案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 专门的查询来使用它是没有问题的。