首页 > 解决方案 > Micronaut 和 Neo4j 的 ResultConsumedException:无法再访问此结果的记录,因为结果已被使用

问题描述

我试图让一个简单的应用程序与 Micronaut 1.3.5 和 Neo4J 4.0.0 一起使用。我正在使用io.micronaut.configuration:micronaut-neo4j-bolt:2.0.0驱动程序。我有这样的代码:

public Stream<Map<String, Object>> findAll() {
   try (Session s = driver.session()) {
       String stmt = "MATCH (n:Product) RETURN n";
       return s.readTransaction(tx -> tx.run(stmt)).list(r -> r.asMap()).stream();
   }
}

我得到以下异常:

result has already been consumed or the query runner where the result is created has already been closed.
org.neo4j.driver.exceptions.ResultConsumedException: Cannot access records on this result any more as the result has already been consumed or the query runner where the result is created has already been closed.

我做了一些谷歌搜索,发现了一些表明这是正常行为的事情,但没有讨论实际解决方案。我假设它与驱动程序/会话的异步性质有关。

标签: neo4jmicronaut

解决方案


可行的方法是,

Stream<Map<String, Object>> stream = s.readTransaction(tx -> {
    Result result = tx.run(stmt);
    return result.list(r -> r.asMap()).stream();
 });

结果需要在readTransaction

https://github.com/neo4j/neo4j-java-driver/tree/4.1/examples/src/main/java/org/neo4j/docs/driver有很多示例,您可能会发现它们很有用


推荐阅读