【问题标题】:Converting node to object将节点转换为对象
【发布时间】:2019-03-17 11:56:58
【问题描述】:

假设我无权访问SessionFactory,将Neo4j session 执行的StatementResult 转换为正确的对象或至少一个Json 的正确方法是什么?

我正在这样做,它看起来笨拙而冗长:

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?

【问题讨论】:

  • 为什么不使用 Neo4j-OGM 呢?这是这个项目的目标......否则你可以编写一个函数将Record转换为JSON(或其他)并将其放入第一个Map函数中(之后删除所有内容)
  • @logisima 好的,我试试

标签: java json neo4j neo4j-ogm jooby


【解决方案1】:

您可以使用 Spring-Data-Neo4j (SDN) 将查询结果映射到域实体。你只需要下面三个代码sn-ps。

存储库

@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();

附录

刚刚从 GraphAware 找到了 @Luanne 的 wonderful article,用于同一主题。

【讨论】:

  • 问题是......我不使用 Spring
猜你喜欢
  • 1970-01-01
  • 2017-09-20
  • 2015-08-10
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
相关资源
最近更新 更多