有关“继承”和neo4j的问题

时间:2019-11-26 17:17:17

标签: java spring-boot neo4j spring-data-neo4j

我是neo4j世界的新手,请多多包涵。 现在,我在理解spring-boot-starter-data-neo4j如何处理自定义查询时遇到问题。让我解释一下情况:

我正在研究规则引擎原型,到目前为止,我仅试图连接数据库并对其进行简单查询,然后在REST服务上返回这些查询。 我正在使用规则,规则可以是复合的也可以是简单的。复合规则可以在其中运行其他规则(简单规则或其他复合规则)。我有以下课程,并相应地制作了neo4j回购

@Dataabstract public class BaseRuleDTO {
@Id
private Long id;
private String name;
private String description;
}

@NodeEntity(label = "CompositeRule")
public class CompositeRuleDTO extends BaseRuleDTO {
private String type;
@Relationship(type = "HAS")
private List<SingleRuleDTO> has = new ArrayList<>();
}

@NodeEntity(label = "SimpleRule")
public class SingleRuleDTO extends BaseRuleDTO {
@JsonBackReference
@Relationship(type = "HAS", direction = Relationship.INCOMING)
private List<CompositeRuleDTO> compositeRules;
@Relationship(type = "WHEN")
private ConditionDTO condition;
@Relationship(type = "THEN")
private List<ActionDTO> actions;
}

public interface RulesDAO extends Neo4jRepository<BaseRuleDTO, Long>

并相应地设计了图形。所有复合规则和简单规则节点也都具有“规则”标签,因此我可以同等地搜索它们。 Graphs

问题是,我试图获取所有规则及其相关元素,但仅获取“入门”规则,即未链接到其他规则的规则,为此我进行了此查询(以及其他一些变体):

MATCH s=(a:rule)-[*..]->() //all rules and elements
where not (a)<-[:HAS]-() // that don't have an incoming has relationship
RETURN distinct (a)-[*1..]->() //return all the elements

这在neo4j浏览器上起作用,但是当在带有库的代码上执行时,我总是会得到3条规则,即复合(内部包含单打)和2条(单独)。

[
    {
        "id": 182,
        "name": "DogRules",
        "description": "2as2d",
        "priority": 0,
        "type": "ActivationRuleGroup",
        "has": [
            {
                "id": 180,
                "name": "cantalk",
                "description": "asd",
                "priority": 0,
                "condition": {
                    "id": 184,
                    "rules": null,
                    "condition": "object.canTalk == true"
                },
                "actions": [
                    {
                        "id": 186,
                        "rules": null,
                        "action": "object.name = \"Talking dog\""
                    }
                ]
            },
            {
                "id": 181,
                "name": "canttalk",
                "description": "2asd",
                "priority": 0,
                "condition": {
                    "id": 183,
                    "rules": null,
                    "condition": "object.canTalk == false"
                },
                "actions": [
                    {
                        "id": 185,
                        "rules": null,
                        "action": "object.name = \"Dog\""
                    }
                ]
            }
        ]
    },
    {
        "id": 180,
        "name": "cantalk",
        "description": "asd",
        "priority": 0,
        "condition": {
            "id": 184,
            "rules": null,
            "condition": "object.canTalk == true"
        },
        "actions": [
            {
                "id": 186,
                "rules": null,
                "action": "object.name = \"Talking dog\""
            }
        ]
    },
    {
        "id": 181,
        "name": "canttalk",
        "description": "2asd",
        "priority": 0,
        "condition": {
            "id": 183,
            "rules": null,
            "condition": "object.canTalk == false"
        },
        "actions": [
            {
                "id": 185,
                "rules": null,
                "action": "object.name = \"Dog\""
            }
        ]
    }
]

无论何时添加关系“ HAS”,无论什么情况,我都会获得3条规则,而不仅仅是组合规则。

对为什么有任何想法?我已经检查了代码,并了解它正在尝试返回它单独找到的所有规则元素。但是我认为,如果我设置一个带有过滤器的查询,它应该兑现这一要求并返回我所需要的东西?

预先感谢

0 个答案:

没有答案