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にはデータがありません。それは再びDBに行きます。

でも非効率じゃないですか?ExecutionEngine.executeすでにクエリをトランザクションにラップしています。返された「ノード」のプロパティを取得するために別のトランザクションを作成すると、データの一貫性が失われる可能性があります。Node実際のオブジェクトで iterator を返さないのはなぜですか?

私のシナリオでデータを取得する正しい方法は何ですか?

4

0 に答える 0