私は 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 を返さないのはなぜですか?
私のシナリオでデータを取得する正しい方法は何ですか?