【问题标题】:Storing Map using SpringData使用 SpringData 存储地图
【发布时间】:2018-11-12 11:26:43
【问题描述】:

我正在从 REST 服务获取 JSON(170~ 费率)

{
  "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 [日期])) 必须相同 作为引用主键的列数(exchange_rate [日期,名称])

我很困惑,如何将地图存储在数据库中?

【问题讨论】:

  • 嗯,错误很明显:您只是没有创建存储费率所需的数据库表(费率)。去做吧。
  • 可以序列化成json。

标签: java mysql spring spring-data


【解决方案1】:
  1. 您可以尝试使用 Jackson 框架将 Json 数据转换为 POJO。

例子:

String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
Car car = objectMapper.readValue(json, Car.class);
  1. 仅当表“货币汇率”真实存在时,才会在数据库中创建记录。 您可以在应用程序配置文件中写入spring.jpa.generate-ddl=false,然后表将自动创建。

  2. 错误MappingException: Foreign key (FK9s4... 它是由于不正确的实体关系。但是你只写了一个实体。

【讨论】:

    猜你喜欢
    • 2017-12-22
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    相关资源
    最近更新 更多