如何确保 HashMap 的每次迭代都是事务性的
How to ensure that each iteration of a HashMap is transactional
我有一种方法可以在不删除键的情况下从哈希图中删除值。
HashMap的结构如下,注意Kennel和Dog都是Java对象:
Map<Kennel, List<Dog>> mapOfKennels;
在我下面的方法中,我遍历了我数据库中的所有狗舍和狗,并从狗舍中删除了被主人带回家的狗(使用 Crud 存储库)(此逻辑在前面的代码中定义)。
我只想从我的数据库中删除所有或none(即事务)从单个狗窝中删除的狗,即HashMap的每次迭代
我的 @transactional
方法可以放在哪里?
当前代码:
public void deleteDogsFromKennels(Map<Kennel, List<Dog>> mapOfKennelsAndDogs) {
//For each Kennel in the Map
for (Map.Entry<Kennel, List<Dog>> entry : mapOfKennelsAndDogs.entrySet()) {
String key = entry.getKey().getId();
List<Dog> dogList = entry.getValue();
//For each Dog in Kennel
for (int i = 0; i < dogList.size(); i++) {
dogRepository.delete(dogList.get(i));
}
}
}
重构您的代码,以便通过专用方法处理每个 kennel 的删除。然后给这个方法加上@Transactional 注解。例如在 DogRepository
@Transactional
public class DogRepository{
public void deleteDogs(List<Dog> dogs){
//delete all dogs
}
}
然后在你的客户端代码中
public void deleteDogsFromKennels(Map<Kennel, List<Dog>> mapOfKennelsAndDogs) {
//For each Kennel in the Map
for (Map.Entry<Kennel, List<Dog>> entry :mapOfKennelsAndDogs.entrySet()){
String key = entry.getKey().getId();
List<Dog> dogList = entry.getValue();
try{
dogRepository.deleteDogs(dogList);
}
catch(Exception ex){
//log failed to delete kennel with key
}
}
}
确保 deleteDogs 方法与 deleteDogsFromKennels 方法位于单独的 class 中,否则交易将无法进行。
我有一种方法可以在不删除键的情况下从哈希图中删除值。
HashMap的结构如下,注意Kennel和Dog都是Java对象:
Map<Kennel, List<Dog>> mapOfKennels;
在我下面的方法中,我遍历了我数据库中的所有狗舍和狗,并从狗舍中删除了被主人带回家的狗(使用 Crud 存储库)(此逻辑在前面的代码中定义)。
我只想从我的数据库中删除所有或none(即事务)从单个狗窝中删除的狗,即HashMap的每次迭代
我的 @transactional
方法可以放在哪里?
当前代码:
public void deleteDogsFromKennels(Map<Kennel, List<Dog>> mapOfKennelsAndDogs) {
//For each Kennel in the Map
for (Map.Entry<Kennel, List<Dog>> entry : mapOfKennelsAndDogs.entrySet()) {
String key = entry.getKey().getId();
List<Dog> dogList = entry.getValue();
//For each Dog in Kennel
for (int i = 0; i < dogList.size(); i++) {
dogRepository.delete(dogList.get(i));
}
}
}
重构您的代码,以便通过专用方法处理每个 kennel 的删除。然后给这个方法加上@Transactional 注解。例如在 DogRepository
@Transactional
public class DogRepository{
public void deleteDogs(List<Dog> dogs){
//delete all dogs
}
}
然后在你的客户端代码中
public void deleteDogsFromKennels(Map<Kennel, List<Dog>> mapOfKennelsAndDogs) {
//For each Kennel in the Map
for (Map.Entry<Kennel, List<Dog>> entry :mapOfKennelsAndDogs.entrySet()){
String key = entry.getKey().getId();
List<Dog> dogList = entry.getValue();
try{
dogRepository.deleteDogs(dogList);
}
catch(Exception ex){
//log failed to delete kennel with key
}
}
}
确保 deleteDogs 方法与 deleteDogsFromKennels 方法位于单独的 class 中,否则交易将无法进行。