diff --git a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/template/PathMappingIterator.java b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/template/PathMappingIterator.java index a3348b10a..85932a3e1 100644 --- a/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/template/PathMappingIterator.java +++ b/spring-data-neo4j/src/main/java/org/springframework/data/graph/neo4j/template/PathMappingIterator.java @@ -17,6 +17,7 @@ package org.springframework.data.graph.neo4j.template; import org.neo4j.graphdb.Path; +import org.neo4j.helpers.collection.ClosableIterable; import org.neo4j.helpers.collection.IterableWrapper; import java.util.ArrayList; @@ -37,16 +38,24 @@ public class PathMappingIterator { case EAGER: case EAGER_STOP_ON_NULL: List result = new ArrayList(); - for (Path path : paths) { - T mapped = pathMapper.mapPath(path); - if (mapped == null && mode == EAGER_STOP_ON_NULL) break; - result.add(mapped); + try { + for (Path path : paths) { + T mapped = pathMapper.mapPath(path); + if (mapped == null && mode == EAGER_STOP_ON_NULL) break; + result.add(mapped); + } + } finally { + close(paths); } return result; case EAGER_IGNORE_RESULTS: - for (Path path : paths) { - pathMapper.mapPath(path); + try { + for (Path path : paths) { + pathMapper.mapPath(path); + } + } finally { + close(paths); } return null; case LAZY: @@ -61,6 +70,12 @@ public class PathMappingIterator { } } + private void close(Iterable paths) { + if (paths instanceof ClosableIterable) { + ((ClosableIterable)paths).close(); + } + } + private IterationController.IterationMode getIterationControl(PathMapper pathMapper) { if (pathMapper instanceof IterationController) { IterationController.IterationMode result = ((IterationController) pathMapper).getIterationMode();