我有一个表“ Details”,其中包含来自“ City”,“ Town”,“ branch”表的信息。它们都是一次性配置表,它们的信息是恒定的。它们永远不需要更新。
“详细信息”表具有来自这些表的外键引用,例如“ city_id”,“ town_id”,“ branch_id”。
现在的问题是,当上载“详细信息”的数据时,它具有“ City_name”,“ town_name”和“ branch name”。我需要将此数据转换为ID以将其存储在“详细信息”中
我应该怎么做才能实现自己的目标?
示例:
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
答案 0 :(得分:3)
您需要获取引用的对象,然后创建实体并保存。应该是这样的:
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);