用springdata存储Map

wgxvkvu9  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(298)

我正在从rest服务获得以下json(170~速率)

{
  "success":true,
  "timestamp":1527944949,
  "base":"EUR",
  "date":"2018-06-02",
  "rates":{
    "AED":4.284515,
    "AFN":83.084064,
    "ALL":124.882747,
    ....
  }
}

我想把它放在我的db上,和下面的课一起

@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
}

如果我理解正确的话,它应该用我想要的数据创建一个新的表“rates”?但结果是
mysqlsyntaxerrorexception:表“currency\u rate.rates”不存在
其中货币汇率是我的db名称
我试着换成

@CollectionTable(name="exchange_rate", joinColumns=@JoinColumn(name="date"))

但它给了我
mappingexception:外键(fk9s46rfp5jp46vm7ep4cbc020x:汇率[日期])必须与引用的主键(汇率[日期,名称])具有相同的列数
我很困惑,怎么把Map存储在数据库里?

ddrv8njm

ddrv8njm1#

您可以尝试使用jackson框架将json数据转换为pojo。
例子:

String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
Car car = objectMapper.readValue(json, Car.class);

当“货币汇率”表实际存在时,数据库中的记录将只创建thwn。你可以写信 spring.jpa.generate-ddl=false 在应用程序配置文件中,表将自动创建。
错误 MappingException: Foreign key (FK9s4... 这是由于实体关系不正确造成的。但你只写了一个实体。

相关问题