使用Neo4j Java Driver 4.4的IN子句查询时遇ResultConsumedException错误
解决Neo4j Java Driver的ResultConsumedException错误
错误原因:你的代码中,
session.readTransaction(tx -> tx.run(query))执行完毕后事务会自动关闭,此时返回的Result对象已无法访问。后续调用.list()时,结果已被消费或查询运行器已关闭,因此抛出异常。修正后的代码:将
.list()的调用放在事务的lambda表达式内部,确保在事务活跃状态下获取记录列表:
ArrayList<String> changedMethods = ... Query query = new Query( "MATCH (changedFunction: Function) WHERE changedFunction.signature IN $changedMethods \n" + "MATCH (affectedFunction: Function)-[:CALLS]->(changedFunction) \n" + "RETURN affectedFunction.functionName", parameters("changedMethods", changedMethods)); try (Session session = driver.session(SessionConfig.forDatabase("neo4j"))) { List<Record> a = session.readTransaction(tx -> tx.run(query).list()); if (!a.isEmpty()) { System.out.println(a.get(0).toString()); } else { System.out.println("未找到匹配的记录"); } }
- IN查询用法确认:你当前通过
$changedMethods传递集合参数的方式是正确的,Neo4j Java Driver 4.4会自动处理集合类型参数,无需额外转换。查询在Neo4j Workspace能正常运行,说明Cypher语句本身无问题,问题仅出在Java代码获取结果的时机上。
内容的提问来源于stack exchange,提问作者firemancer
相关产品推荐
相关产品推荐

