Хранение карты с использованием SpringData - PullRequest
0 голосов
/ 02 июня 2018

Я получаю JSON из службы REST (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 - это мое имя базы данных

I'vпопытался изменить на

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

, но это дает мне

MappingException: Внешний ключ (FK9s46rfp5jp46vm7ep4cbc020x: exchange_rate [date])) должен иметь то же количество столбцов, что и первичный ключ, на который есть ссылка(exchange_rate [дата, имя])

И я совершенно запутался, как хранить карту в БД?

1 Ответ

0 голосов
/ 03 июня 2018
  1. Вы можете попробовать преобразовать данные Json в POJO, используя среду Jackson.

Пример:

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

Запись в базе данных будет создаваться только тогда, когда таблица «курс валюты» реально существует.Вы можете написать spring.jpa.generate-ddl=false в конфигурационном файле приложения, тогда таблица будет создана автоматически.

Ошибка MappingException: Foreign key (FK9s4... это из-за неправильных отношений сущностей.Но вы написали только одну сущность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...