【问题标题】:SDN 4 - Neo4jOperation.convert() deprecatedSDN 4 - 不推荐使用 Neo4jOperation.convert()
【发布时间】:2015-06-26 09:32:09
【问题描述】:

使用 SDN 3 可以使用 Neo4jOperations.convert(Object value, Class type) 将返回 Iterable> 的密码查询的结果转换为 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 没有说明映射/转换是如何显式或隐式完成的。

我正在使用快照构建。

非常感谢任何帮助。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我不知道 @QueryResult 已经实现了,因为它不在 M1 版本中。
    【解决方案2】:

    对于此用例,您必须返回 ID(person) 并改用 repository.findOneneo4jOperations.load

    【讨论】:

    • 谢谢卢安妮。这是一个临时的解决方法还是将来使用 SDN4 的方法?
    • 至少在第一个 GA 版本中没有计划
    猜你喜欢
    • 2018-03-15
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 2012-11-14
    • 1970-01-01
    • 2019-11-08
    相关资源
    最近更新 更多