我怎样才能让 Neo4j OGM 连接从复杂查询返回的所有 POJO?
How can I get Neo4j OGM to wire up all the POJOs returned from a complex query?
假设我有这样的查询:
START a=node(1), b=node(2) MATCH p=a-[:LINKED_TO*0..]->b
WITH nodes(p) as pathList UNWIND pathList AS pathNode
MATCH breakfast=pathNode-[:HAS_A]->(:Bagel)
RETURN pathList, breakfast
我想要一个 List<Node>
对应于 pathList
,并且我希望该列表中的每个节点都定义了它的 Bagel。我可以从那个包含所有信息的查询中得到一个 Iterable<Map<String, Object>>
,但是 POJO 有空字段,理想情况下它们会相互引用。
有没有办法让 OGM 从这样的查询中吐出完全链接的域对象?
是的,如果您使用 OGM 2.x 并且您可以编写查询,以便它 return 包含您想要的节点 和 关系映射。
例如,使用您的查询的简化版本-
START a=node(1), b=node(2)
MATCH p=a-[:LINKED_TO*0..]->b
RETURN nodes(p) as pathList, rels(p) as rels
pathList
将为您提供映射域实体列表。为您映射的相关实体将是您在 rels
中 return 编辑的实体。
所以本质上,你return就是映射的。如果只想映射一个相关实体,return 只映射与其结束节点的关系。
如果您使用 OGM 1.x,如果您想要返回 Result
或 Iterable<Map<String, Object>>
,则不支持实体映射。但是,如果您使用 session.queryForObject
或 session.query(Class<T> objectType, String cypher, Map<String, ?> parameters)
,它将起作用
假设我有这样的查询:
START a=node(1), b=node(2) MATCH p=a-[:LINKED_TO*0..]->b
WITH nodes(p) as pathList UNWIND pathList AS pathNode
MATCH breakfast=pathNode-[:HAS_A]->(:Bagel)
RETURN pathList, breakfast
我想要一个 List<Node>
对应于 pathList
,并且我希望该列表中的每个节点都定义了它的 Bagel。我可以从那个包含所有信息的查询中得到一个 Iterable<Map<String, Object>>
,但是 POJO 有空字段,理想情况下它们会相互引用。
有没有办法让 OGM 从这样的查询中吐出完全链接的域对象?
是的,如果您使用 OGM 2.x 并且您可以编写查询,以便它 return 包含您想要的节点 和 关系映射。
例如,使用您的查询的简化版本-
START a=node(1), b=node(2)
MATCH p=a-[:LINKED_TO*0..]->b
RETURN nodes(p) as pathList, rels(p) as rels
pathList
将为您提供映射域实体列表。为您映射的相关实体将是您在 rels
中 return 编辑的实体。
所以本质上,你return就是映射的。如果只想映射一个相关实体,return 只映射与其结束节点的关系。
如果您使用 OGM 1.x,如果您想要返回 Result
或 Iterable<Map<String, Object>>
,则不支持实体映射。但是,如果您使用 session.queryForObject
或 session.query(Class<T> objectType, String cypher, Map<String, ?> parameters)