java - 使用 SpringData 存储地图
问题描述
我正在从 REST 服务(170~ 费率)获取以下 JSON
{
"success":true,
"timestamp":1527944949,
"base":"EUR",
"date":"2018-06-02",
"rates":{
"AED":4.284515,
"AFN":83.084064,
"ALL":124.882747,
....
}
}
而且我想通过以下课程将其保留在我的数据库中
@Entity
@Table(name = "exchange_rate")
public class ExchangeRateEntity {
@Id
@Column(unique = true)
private Date date;
@ElementCollection
@MapKeyColumn(name="name")
@Column(name="value")
@CollectionTable(name="rates", joinColumns=@JoinColumn(name="date"))
private Map<String, Double> rates;
//getters and setters
}
如果我理解正确,它应该用我想要的数据制作新表“费率”吗?但它结束了
MySQLSyntaxErrorException:表'currency_rate.rates'不存在
其中 currency_rate 是我的数据库名称
我试图改变为
@CollectionTable(name="exchange_rate", joinColumns=@JoinColumn(name="date"))
但它给了我
MappingException: 外键 (FK9s46rfp5jp46vm7ep4cbc020x:exchange_rate [date])) 必须具有与引用的主键相同的列数 (exchange_rate [date,name])
我很困惑,如何将地图存储在数据库中?
解决方案
- 您可以尝试使用 Jackson 框架将 Json 数据转换为 POJO。
例子:
String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
Car car = objectMapper.readValue(json, Car.class);
只有当表“货币汇率”真实存在时,数据库中的记录才会创建。您可以写入
spring.jpa.generate-ddl=false
应用程序配置文件,然后表将自动创建。MappingException: Foreign key (FK9s4...
由于不正确的实体关系而出错。但是你只写了一个实体。
推荐阅读
- javascript - 我无法从流媒体服务器下载 M3U8 HLS 播放列表而不会遇到 CORS 错误?
- git - 带回我在 git 本地删除的文件
- java - 仅在临界区中断另一个线程
- mediawiki - DrawioEditor 扩展似乎在 MediaWiki 1.33 中不起作用
- excel - 将 excel 文件转换为 .txt 文件时如何删除尾随制表符和引号?
- java - @Around 注释:使变量可用于连接点而不更改方法签名并稍后使用
- ansible - 添加选项以仅在 var 定义时进行同步
- sql - 如何重构在 SQL Server 中具有联接的子查询
- microsoft-graph-api - msgraph-sdk-dotnet:为 Post/Put/Patch 请求获取 HttpRequestMessage
- aws-lambda - 触发 lambda cloudwatch vs api 网关