我是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条规则,而不仅仅是组合规则。
对为什么有任何想法?我已经检查了代码,并了解它正在尝试返回它单独找到的所有规则元素。但是我认为,如果我设置一个带有过滤器的查询,它应该兑现这一要求并返回我所需要的东西?
预先感谢