代码之家  ›  专栏  ›  技术社区  ›  lapots

将节点转换为对象

  •  1
  • lapots  · 技术社区  · 6 年前

    转换的正确方法是什么 StatementResult 新4J session 执行到适当的对象或至少是JSON,假设我没有访问权限 SessionFactory ?

    我是这样做的,看起来笨拙而冗长:

    var session = require(Driver.class).session(); // v1 Driver, v1 Session
    try (session) {
        Iterable<Record> iterable =
                () -> session.run(FIND_BY_TITLE_LIKE, Map.of("titleLike", ".*" + titleLike + ".*"));
        var list = StreamSupport
                .stream(iterable.spliterator(), false)
                .map(Record::asMap)
                .map(Map::values)
                .flatMap(Collection::stream) // nodes
                .map(node -> ((InternalNode) node).asMap())
                .collect(Collectors.toList());
        LOGGER.info("Processed list: {}", list);
        return list;
    }
    

    也许我该换点别的 Driver Session 为了这个?

    1 回复  |  直到 6 年前
        1
  •  0
  •   ThirstForKnowledge    6 年前

    可以使用spring-data-neo4j(sdn)将查询结果映射到域实体。您只需要以下三个代码片段。

    知识库

    @Repository
    public interface NodeEntityNameDAO extends Neo4jRepository<NodeEntityName, Long> {
      @Query("MATCH (nodeA:LabelA)<-[:CONTAINS]-(nodeB:LabelB) RETURN nodeA.name AS nodeAName, nodeB.name AS nodeBName;")
      NodeAAndBResult[] getNodeAAndB();
    }
    

    结果对象

    @QueryResult
    public class NodeAAndBResult {
      private String nodeAName;
      private String nodeBName;
    
      // omitted default constructor as well getter and setter for clarity
    }
    

    业务逻辑

    NodeAAndBResult[] nodeAAndBResults = nodeEntityNameDAO.getNodeAAndB();
    

    补遗

    刚刚找到一个 wonderful article 作者:grashaware的@luanne,主题相同。

    推荐文章