我是 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
对象的迭代器?
在我的场景中获取数据的正确方法是什么?