我有一个表"详细信息",其中包含来自"城市","城镇","分支"表的信息。它们都是一次性配置表,它们的信息是恒定的。它们永远不需要更新。
"详细信息"表具有来自这些表的外键引用,如"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);