Neo4J 2.0:为什么`ExecutionEngine.execute`返回代理列表而不是真实节点?

时间:2013-10-22 04:28:42

标签: neo4j

我是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没有数据。再次进入DB等等。

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

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

0 个答案:

没有答案