Как структурировать загрузочный объект Entity in Spring / JPA, имеющий несколько внешних ключей? - PullRequest
0 голосов
/ 14 января 2019

У меня есть таблица "Детали", которая содержит информацию из таблиц "Город", "Город", "филиал". Все они являются одноразовыми таблицами конфигурации, и их информация постоянна. Их не нужно обновлять.

Таблица «Подробности» содержит ссылки на внешние ключи из этих таблиц, такие как «city_id», «town_id», «branch_id».

Теперь проблема в том, что когда данные загружаются для «деталей», они имеют «City_name», «town_name» и «имя филиала». Мне нужно преобразовать эти данные в идентификаторы, чтобы сохранить их в «details»

Что я должен сделать, чтобы достичь своей цели?

Пример:

 Data uploads: "City name","town name", "branch name".

Город:

id  | City_name
 1  | city name
 2  | city name 2

Город:

id  | Town_name
 1  | town name
 2  | town name 2

Отделение

id  | branch_name
 1  | branch name
 2  | branch name 2

Теперь данные, которые должны храниться в «деталях»

details_id | city_id | town_id | branch_id
 1         |1        |1        |1

1 Ответ

0 голосов
/ 14 января 2019

Вам нужно выбрать упомянутые объекты, а затем создать объект и сохранить его. Должно быть что-то вроде:

City foundCity = CityRepository.findByName(cityName).orElseThrow(() -> new EnityNotFoundException("City not found"));
...
Detail detail = new Detail();
detail.setCity(foundCity);
...
detailRepository.save(detail);

Если у вас есть большое количество Details для создания и число упомянутых объектов не так велико, вам может потребоваться загрузить все упомянутые объекты в память, прежде чем продолжить. Как

List<City> cities = cityRepository.findAll();
...

List<Detail> detailsToSave = new ArrayList<>();

City foundCity = cities.stream()
        .filter(item -> name.equals(item.getName()))
        .orElseThrow(() -> new EnityNotFoundException("City not found"));
    ...
    Detail detail = new Detail();
    detail.setCity(foundCity);
    ...
    detailsToSave.add(detail);
    ....

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