キーを削除せずにハッシュマップから値を削除する方法があります。HashMapの各反復がトランザクションであることを保証する方法
次のようにHashMapの構造があり、ケンネルと犬の両方のJavaオブジェクトである点に注意してください。
Map<Kennel, List<Dog>> mapOfKennels;
を私の方法では、私はCRUDを使用して(私のデータベース内のすべての犬小屋や犬をループして犬を削除しています下回ります所有者によって家に持ち帰られた犬舎からのものである(これについては前出のコードのロジック参照)。
私だけつまり私が行うには、私の@transactional
方法を置くことができるのHashMap
の各反復、全か無(つまり、トランザクション)は、単一の小屋から削除されたときに、私のDBから犬を削除したいそう?
現在のコード:
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));
}
}
}
@ememChitsigaが回答で言ったように、コードをリファクタリングしたくない場合は、**メソッド**レベル、すなわち 'deleteDogsFromKennels()'または**クラス**レベルで '@ Transactional'を追加してみてください以下。それはうまくいくはずです。 –