有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用SpringData存储地图的java

我从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: Table 'currency_rate.rates' doesn't exist

其中货币汇率是我的db名称

我试着换成

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

但它给了我

MappingException: Foreign key (FK9s46rfp5jp46vm7ep4cbc020x:exchange_rate [date])) must have same number of columns as the referenced primary key (exchange_rate [date,name])

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


共 (1) 个答案

  1. # 1 楼答案

    1. 您可以尝试使用Jackson框架将Json数据转换为POJO

    例如:

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

    2. 错误MappingException: Foreign key (FK9s4...由于实体关系不正确而导致失败。但你只写了一个实体