如何使用 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,然后将其传递给要呈现的视图。
我在 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,然后将其传递给要呈现的视图。