diff --git a/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java b/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java index f89d0eb059..6e3e75b7e9 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/relation/BaseRelationService.java @@ -200,8 +200,10 @@ public class BaseRelationService implements RelationService { private void checkFromDeleteSync(Cache cache, List results, EntityRelation relation, boolean isRemove) { if (isRemove) { results.add(relationDao.deleteRelation(relation)); + cacheEviction(relation, relation.getTo(), cache); + } else { + cacheEviction(relation, relation.getFrom(), cache); } - cacheEviction(relation, relation.getTo(), cache); } @Override @@ -209,12 +211,12 @@ public class BaseRelationService implements RelationService { Cache cache = cacheManager.getCache(RELATIONS_CACHE); log.trace("Executing deleteEntityRelationsAsync [{}]", entity); validate(entity); - List>> inboundRelationsList = new ArrayList<>(); + List>> inboundRelationsListTo = new ArrayList<>(); for (RelationTypeGroup typeGroup : RelationTypeGroup.values()) { - inboundRelationsList.add(relationDao.findAllByTo(entity, typeGroup)); + inboundRelationsListTo.add(relationDao.findAllByTo(entity, typeGroup)); } - ListenableFuture>> inboundRelations = Futures.allAsList(inboundRelationsList); - ListenableFuture> inboundDeletions = Futures.transform(inboundRelations, + ListenableFuture>> inboundRelationsTo = Futures.allAsList(inboundRelationsListTo); + ListenableFuture> inboundDeletions = Futures.transform(inboundRelationsTo, (AsyncFunction>, List>) relations -> { List> results = getListenableFutures(relations, cache, true); return Futures.allAsList(results); @@ -222,12 +224,12 @@ public class BaseRelationService implements RelationService { ListenableFuture inboundFuture = Futures.transform(inboundDeletions, getListToBooleanFunction()); - List>> inboundRelationsList1 = new ArrayList<>(); + List>> inboundRelationsListFrom = new ArrayList<>(); for (RelationTypeGroup typeGroup : RelationTypeGroup.values()) { - inboundRelationsList1.add(relationDao.findAllByTo(entity, typeGroup)); + inboundRelationsListFrom.add(relationDao.findAllByTo(entity, typeGroup)); } - ListenableFuture>> inboundRelations1 = Futures.allAsList(inboundRelationsList1); - Futures.transform(inboundRelations1, (AsyncFunction>, List>) relations -> { + ListenableFuture>> inboundRelationsFrom = Futures.allAsList(inboundRelationsListFrom); + Futures.transform(inboundRelationsFrom, (AsyncFunction>, List>) relations -> { List> results = getListenableFutures(relations, cache, false); return Futures.allAsList(results); }); @@ -249,8 +251,10 @@ public class BaseRelationService implements RelationService { private void checkFromDeleteAsync(Cache cache, List> results, EntityRelation relation, boolean isRemove) { if (isRemove) { results.add(relationDao.deleteRelationAsync(relation)); + cacheEviction(relation, relation.getTo(), cache); + } else { + cacheEviction(relation, relation.getFrom(), cache); } - cacheEviction(relation, relation.getTo(), cache); } private void cacheEviction(EntityRelation relation, EntityId entityId, Cache cache) {