0

我是 Neo4j 的新手,在其文档中找不到答案。

为什么ExecutionEngine.execute返回代理列表而不是真实节点?这是我的功能

def findUsers: List[ObjectId] = {
  val query = engine.execute(s"MATCH (n:${User.name()}) RETURN n")
  val it = query.columnAs[Node]("n")
  val nodes: List[Node] = it.toList
  for (node <- nodes; if node.hasLabel(User)) yield new ObjectId(node.getProperty("id").asInstanceOf[String])
}

执行时抛出异常

Exception in thread "main" org.neo4j.graphdb.NotInTransactionException
    at org.neo4j.kernel.ThreadToStatementContextBridge.transaction(ThreadToStatementContextBridge.java:58)
    at org.neo4j.kernel.ThreadToStatementContextBridge.statement(ThreadToStatementContextBridge.java:49)
    at org.neo4j.kernel.impl.core.NodeProxy.hasLabel(NodeProxy.java:551)

我明白为什么我得到一个例外。NodeProxy没有数据。它再次进入数据库等等。

但这不是低效吗?ExecutionEngine.execute已经将查询包装到事务中。进行另一个事务以获取返回的“节点”的属性可能会导致数据不一致。为什么不返回带有真实Node对象的迭代器?

在我的场景中获取数据的正确方法是什么?

4

0 回答 0