Java 使用SpringData存储地图

Java 使用SpringData存储地图,java,mysql,spring,spring-data,Java,Mysql,Spring,Spring Data,我从REST服务获得以下JSON(170%费率) 我想在我的DB上用下面的类来保存它 @Entity @Table(name = "exchange_rate") public class ExchangeRateEntity { @Id @Column(unique = true) private Date date; @ElementCollection @MapKeyColumn(name="name") @Column(name="va

我从REST服务获得以下JSON(170%费率)

我想在我的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
}
但它给了我

MappingException:外键 (FK9s46rfp5jp46vm7ep4cbc020x:汇率[日期])必须具有相同的 作为引用主键的列数(汇率 [日期、姓名])

我完全搞不懂,如何在数据库中存储地图

  • 您可以尝试使用Jackson框架将Json数据转换为POJO
  • 例如:

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

  • 错误
    MappingException:外键(FK9s4…
    由于实体关系不正确,因此将其删除。但您只编写了一个实体


  • 错误很明显:您没有创建存储速率所需的数据库表(rates)。只需这样做,就可以将其序列化为json。
    @CollectionTable(name="exchange_rate", joinColumns=@JoinColumn(name="date"))
    
    String json = "{ \"color\" : \"Black\", \"type\" : \"BMW\" }";
    Car car = objectMapper.readValue(json, Car.class);