Можно ли этого избежать
Код: Выделить всё
List output = new ArrayList
// fill the list in a transaction
return output.stream()
Может быть, что-то вроде
p>
Код: Выделить всё
@Procedure(value = "bar", mode = Mode.READ)
public Stream bar() {
try (final Transaction tx = db.beginTx()) {
final ResourceIterator iterator = tx.findNodes(Label.label("A"));
return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false)
.map(node -> new MyLong((Long) node.getProperty("a")))
.onClose(tx::commit);
}
}
Код: Выделить всё
MyLongК сожалению, описанную выше процедуру нельзя использовать, потому что:
Код: Выделить всё
Neo.ClientError.Procedure.ProcedureCallFailed
Failed to invoke procedure `bar`: Caused by: org.neo4j.graphdb.NotInTransactionException: The transaction has been closed.
Код: Выделить всё
@Procedure(value = "foo", mode = Mode.READ)
public Stream foo() {
final Iterator iterator = LongStream.range(0, 100000000000000L).iterator();
return StreamSupport.stream(Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED), false)
.map(MyLong::new);
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... -procedure