Neo4j OGM - 无效 Filter.setRelationshipDirection()

Neo4j OGM - ineffective Filter.setRelationshipDirection()

我尝试使用以下代码加载整个对象(及其层次结构):

final Filter filter = new Filter (this.identity.name(),ComparisonOperator.EQUALS, identity);
filter.setRelationshipDirection(Relationship.OUTGOING);     
final Filters filters = new Filters (filter);
final Collection<T> values = ogmSession.loadAll(this.classType,filters , -1);
if (values != null){
    rvalue = values.iterator().next();
}

但是生成的查询是(有性能问题):

BoltRequest - Request: MATCH (n:`Procedure`) WHERE n.`name` = { `name_0` }  WITH n MATCH p=(n)-[*0..]-(m) RETURN p, ID(n) with params {name_0=WMS-1-B}  

而不是类似的东西(在最后一个 MATCH 子句中有关系方向):

MATCH (n:`Procedure`) WHERE n.`name` = { `name_0` }  WITH n MATCH p=(n)-[*0..]->(m) RETURN p, ID(n) with params {name_0=WMS-1-B}  

我是不是遗漏了什么或者是错误? 谢谢。

查询具有以下依赖项的 Neo4j 3.2 CE:

<parent>
    <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.4.RELEASE</version>
</parent>
<dependency>
    <groupId>org.neo4j.driver</groupId>
    <artifactId>neo4j-java-driver</artifactId>
    <version>1.3.1</version>
</dependency>
<dependency>
    <groupId>org.neo4j</groupId>
    <artifactId>neo4j-ogm-core</artifactId>         
       <version>2.1.3</version>         
</dependency>
<dependency>
    <groupId>org.neo4j</groupId>
    <artifactId>neo4j-ogm-bolt-driver</artifactId>
    <version>2.1.3</version>            
</dependency>

Filter API 对此不是很清楚

setRelationshipDirection(和setRelationshipType)与嵌套属性上的过滤器匹配有关。最后一个 MATCH 总是 p=(n)-[*0..]-(m) 来加载所有相关节点(但也看到这个 feature request)。

也是根据领域模型自动设置的。例如:

Filter filter = new Filter("itemName", "item1");
filter.setNestedPropertyName("items");
filter.setNestedPropertyType(Item.class);
session.loadAll(User.class, filter);

会变成

MATCH (n:`User`) MATCH (m0:`Item`) 
WHERE m0.`itemName` = { `items_itemName_0` } 
MATCH (n)-[:`HAS_ITEM`]-(m0) 
WITH n 
MATCH p=(n)-[*0..1]-(m) // provide depth to change 1 to something else
RETURN ....

当前的 API 支持 Spring Data Neo4j 中的派生查找器,使用自定义查询可能更容易且更具可读性(这也允许您 directly specify what to return and map -参见部分保湿实体)。

好的,用queryForObject方法解决,例如:

T rvalue = ogmSession.queryForObject(this.classType, 
  "MATCH (n:`Procedure`) WHERE n.`name` = { `procedureName` } "+ 
  "WITH n MATCH p=(n)-[*0..10]->(m) RETURN p, ID(n)", Values.parameters("procedureName",identity).asMap());

感谢大家。