【问题标题】:Neo4j OGM query for relationships that don't have entity classesNeo4j OGM 查询没有实体类的关系
【发布时间】:2017-06-15 21:30:46
【问题描述】:

我有一个特定的用例,我有一个 Neo4j 实例,其中一些数据通过 OGM 映射到实体类,而一些数据没有实体类。有一些关系(没有实体类)连接这两种类型的数据。

我已经能够使用 OGM 查询方法来搜索非实体映射节点并返回 NodeModel 实例。但是,当我尝试包含关系时,会出现以下错误:

21:11:28.707 [main] DEBUG org.neo4j.ogm.MetaData - looking for concrete class to resolve label: SPOKE_B
21:11:28.707 [main] DEBUG org.neo4j.ogm.MetaData - This label is not known in the mapping context. Moving on...
21:11:28.707 [main] DEBUG org.neo4j.ogm.MetaData - No resolving class found!!
21:11:28.707 [main] DEBUG org.neo4j.ogm.MetaData - looking for concrete class to resolve label: HUB
21:11:28.707 [main] DEBUG org.neo4j.ogm.MetaData - This label is not known in the mapping context. Moving on...
21:11:28.707 [main] DEBUG org.neo4j.ogm.MetaData - No resolving class found!!
21:11:28.707 [main] DEBUG org.neo4j.ogm.context.GraphEntityMapper - Relationship (0)-[SGEdge]->(2) cannot be hydrated because one or more required node types are not mapped to entity classes

我查看了一些代码,GraphEntityMapper.mapRelationships(),https://github.com/neo4j/neo4j-ogm/blob/master/core/src/main/java/org/neo4j/ogm/context/GraphEntityMapper.java,只有在两个节点都成功映射到实体类时才返回关系。

所以看来我不能使用 OGM 查询方法来获取未映射到实体类的节点之间的关系。有人知道解决这个问题的方法吗?

我意识到可以使用不同的驱动程序,但我宁愿不维护两个不同的驱动程序连接到同一个数据库。

【问题讨论】:

    标签: neo4j-ogm


    【解决方案1】:

    我今天遇到了这个问题并找到了解决方案。

    这是 Neo4j-OGM 的问题。您可以查看问题here。 正如@mangrish 所说:

    要解决这个问题,只需返回 a,r,n 并从 MATCH 中删除路径 声明。

    简而言之,除了RelationshipEntity之外,您还必须返回StartNodeEndNode。这似乎不好,但至少它有效。 例如:您必须以这种方式自定义密码。

    MATCH (s:StartNode)-[r:SGEdge]->(e:EndNode) return s, r, e
    

    注意:你应该看看他们的test

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-25
      • 1970-01-01
      相关资源
      最近更新 更多