如何在 Spring 引导/ JPA 中构建具有多个外键的实体



我有一个表"详细信息",其中包含来自"城市","城镇","分支"表的信息。它们都是一次性配置表,它们的信息是恒定的。它们永远不需要更新。

"

详细信息"表具有来自这些表的外键引用,如"city_id","town_id","branch_id"。

现在的问题是,当数据上传"详细信息"时,它具有"City_name","town_name"和"分支名称"。我需要在 Ids 中转换这些数据以将它们存储在"详细信息"中

应该怎么做才能实现我的目标?

例:

 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

您需要获取引用的对象,然后创建实体并保存它。应该是这样的:

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);

相关内容

  • 没有找到相关文章

最新更新