SDN 4 - Neo4jOperation.convert() deprecated



使用SDN 3可以使用Neo4jOperations.convert(Object value,class type)以转换来自返回Iterable<映射<字符串,对象>gt;到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);

由于T转换(Object值,Class类型)在SDN 4中的Neo4jOperations中不再存在,因此在SDN中它的等价性是什么?

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

我正在使用快照构建。

非常感谢您的帮助。

正如Luane所建议的,您现在需要分两步来完成。对于存储库方法,您可以尝试这样的方法:

@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子句中列出的属性。

对于这个用例,您必须返回ID(person)并使用repository.findOneneo4jOperations.load

相关内容

  • 没有找到相关文章

最新更新