diff --git a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java
index 0c5690c..86e7188 100644
--- a/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java
+++ b/dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java
@@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.thingsboard.server.common.data.BaseData;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.Tenant;
import org.thingsboard.server.common.data.id.EntityId;
@@ -274,14 +275,43 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
public List<RuleNode> getRuleChainNodes(TenantId tenantId, RuleChainId ruleChainId) {
Validator.validateId(ruleChainId, "Incorrect rule chain id for search request.");
List<EntityRelation> relations = getRuleChainToNodeRelations(tenantId, ruleChainId);
- List<RuleNode> ruleNodes = relations.stream().map(relation -> ruleNodeDao.findById(tenantId, relation.getTo().getId())).collect(Collectors.toList());
+ List<RuleNode> ruleNodes = new ArrayList<>();
+ for (EntityRelation relation : relations) {
+ RuleNode ruleNode = ruleNodeDao.findById(tenantId, relation.getTo().getId());
+ if (ruleNode != null) {
+ ruleNodes.add(ruleNode);
+ } else {
+ relationService.deleteRelation(tenantId, relation);
+ }
+ }
return ruleNodes;
}
@Override
public List<EntityRelation> getRuleNodeRelations(TenantId tenantId, RuleNodeId ruleNodeId) {
Validator.validateId(ruleNodeId, "Incorrect rule node id for search request.");
- return relationService.findByFrom(tenantId, ruleNodeId, RelationTypeGroup.RULE_NODE);
+ List<EntityRelation> relations = relationService.findByFrom(tenantId, ruleNodeId, RelationTypeGroup.RULE_NODE);
+ List<EntityRelation> validRelations = new ArrayList<>();
+ for (EntityRelation relation : relations) {
+ boolean valid = true;
+ EntityType toType = relation.getTo().getEntityType();
+ if (toType == EntityType.RULE_NODE || toType == EntityType.RULE_CHAIN) {
+ BaseData entity;
+ if (relation.getTo().getEntityType() == EntityType.RULE_NODE) {
+ entity = ruleNodeDao.findById(tenantId, relation.getTo().getId());
+ } else {
+ entity = ruleChainDao.findById(tenantId, relation.getTo().getId());
+ }
+ if (entity == null) {
+ relationService.deleteRelation(tenantId, relation);
+ valid = false;
+ }
+ }
+ if (valid) {
+ validRelations.add(relation);
+ }
+ }
+ return validRelations;
}
@Override