neo4j - SDN 4 - Neo4jOperation.convert() 已弃用

标签 neo4j spring-data-neo4j spring-data-neo4j-4

使用 SDN 3 可以使用 Neo4jOperations.convert(Object value, Class type) 将返回 Iterable> 的 cypher 查询的结果转换为 Neo4j 域类(用 @NodeEntity 注释)。例如:

Map<String,Object> results = repository.findSomething("John");
for(Map<String,Object> row : results) {
    Person person = neo4jOperations.convert(row.get("person"), Person.class);
    ...
}

// Repository method
@Query("MATCH (person:Person)-[rel]->(node) WHERE person.firstName = {firstName}  RETURN DISTINCT person, COUNT(rel) ORDER BY COUNT(rel)"
Iterable<Map<String,Object>> findSomething(@Param("firstName") String firstName);

由于 SDN 4 中的 Neo4jOperations 中不再存在 T Convert(Object value, Class type),因此 SDN 4 中的等效项是什么?

http://docs.spring.io/spring-data/neo4j/docs/4.0.0.M1/reference/html/#reference_programming_model_simple-mapping不涵盖如何显式或隐式完成映射/转换。

我正在使用快照构建。

非常感谢任何帮助。

最佳答案

正如 Luanne 所建议的,您目前需要分两步执行此操作。对于存储库方法,您可以尝试这样的方法:

@Query("MATCH (p:Person)-[rel]->(node) WHERE p.firstName = {firstName} RETURN DISTINCT p ORDER BY COUNT(rel)")
Iterable<Person> findSomething(@Param("firstName") String firstName);

这应该以正确的顺序返回您想要的 Person 实体,尽管我很高兴实际计数不会被映射,因此您必须发出第二个查询来查找计数,不幸的是.

如果您不需要实际的 Person 实体,而只需要这些节点的某些属性,那么解决方法可能是映射到 @QueryResult 对象反而。像这样的事情:

@Query("MATCH (p:Person)-[rel]->(node) WHERE p.firstName = {firstName} RETURN DISTINCT p.firstName, p.surname, p.dateOfBirth, COUNT(rel) AS rank ORDER BY rank")
Iterable<PersonQueryResult> findSomething(@Param("firstName") String firstName);

...其中 PersonQueryResult 是一个用 @QueryResult 注释的 POJO,其 setter/getter 与查询的 return 子句中列出的属性相对应。

关于neo4j - SDN 4 - Neo4jOperation.convert() 已弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31069679/

相关文章:

java - 在 Neo4j 中如何创建触发器?

tomcat - 使用在 Tomcat 上运行的 Spring Data Neo4j 4 + AspectJ LTW 进行延迟加载

java - JsonGenerationException : Null key for a Map not allowed in JSON (use a converting NullKeySerializer?)

java - Spring 数据 Neo4j 4.0.0 : Can't Create Relationship Between Nodes with the Same Label

neo4j - 有什么理由在 Neo4j 只读事务上调用 `tx.success()` 吗?

java - 在 neo4j 中搜索节点并将其从一个图复制到另一个图

java - 在 Neo4j Desktop 中启用 Java Flight Recorder

java - 在同一应用程序上下文中启用两个 Spring Data 存储库(neo4j 和 h2)

java - Spring/带注释的字段导致找不到类的序列化器

java - 如何使用可嵌入对象映射 Neo4j 节点?