如何使用 spring 数据 jpa 使用 neo4j 获得自定义结果?

how to get custom results using spring data jpa using neo4j?

我在 neo4j 数据库中有一个名为 "User and Review" 的 table。必须从 spring data neo4j 中获取这些数据。在这里我不想获得模态。但我需要一个特定的值。它们是 Id、消息、评级等。问题是如何从 Db 映射这些自定义返回值。请帮助我。

示例查询是:

@Query("MATCH (from:User)-[r:REVIEWED]->(to:User) where r.eventId={0} return ID(r),r.message,r.rating,r.eventId,r.zimId,from.firstName,to.firstName")
    public List<ReviewRelatioshipDto> getReviewsByEventIdAndId(Long eventId);

异常:

SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/social] threw exception [Request processing failed; nested exception is java.lang.RuntimeException: Scalar response queries must only return one column. Make sure your cypher query only returns one item.] with root cause
java.lang.RuntimeException: Scalar response queries must only return one column. Make sure your cypher query only returns one item.

有两种选择 - 一种是使用 @QueryResult,因此,ReviewRelationshipDto 必须注释并遵循 JavaBean getter 约定或使用 @Property

另一种选择是 return 列和值的映射 Iterable<Map<String,Object>>,其中键是列别名,值是列值。

Luanne 在 @QueryResult 中提到的可能是要走的路。

但是,如果您想要一种替代模式来处理视图模型的持久性转换,您仍然可以像通常那样使用 spring 数据 neo4j 填充域模型(而不是 DTO)(在这种情况下,它将被称为 ReviewRelationship)。 Spring Data Neo4j 不会在这一层映射任何 DTO。

然后您可以 select 将您想要的字段添加到 DTO 中。您可以通过将域对象提供给 DTO 构建器来自己完成此操作,或者您可以使用现成的东西,例如 Model Mapper,然后将其传递给要呈现的视图。