Make the Java Stream close the underlying ScrollableResultsIterator upon calling a terminal operation

Description

The JPA 2.2 Query#getResultStream returns a Stream wrapping a Hibernate ScrollableResultsIterator.

However, even if a terminal Stream operation is called, the underlying ScrollableResultsIterator will stay open until the Session is closed.

More, the current implementation does not pass the closeHandler to the IntStream, LongStream, or DoubleStream when calling mapToInt or other methods that return a primitive stream.

We need to create a StreamDecorator, IntStreamDecorator, LongStreamDecorator, and DoubleStreamDecorator that can both delegate the stream calls and close the stream upon executing a terminal operation.

Environment

None

Assignee

Vlad Mihalcea

Reporter

Vlad Mihalcea

Fix versions

Labels

None

backPortable

None

Suitable for new contributors

None

Requires Release Note

None

Pull Request

None

backportDecision

None

Components

Affects versions

Priority

Major
Configure