[hibernate-dev] Stream result change proposal
Vlad Mihalcea
mihalcea.vlad at gmail.com
Tue Jun 7 05:57:24 EDT 2016
To get a picture of why we need this, consider the following example from
the docs:
Stream<Object[]> persons = session.createQuery(
"select p " +
"from Person p " +
"where p.name like :name" )
.setParameter( "name", "J%" )
.stream();
Map<Phone, List<Call>> callRegistry = persons
.map( row -> Person.class.cast( row[0] ) )
.flatMap( person -> person.getPhones().stream() )
.flatMap( phone -> phone.getCalls().stream() )
.collect(Collectors.groupingBy(Call::getPhone));
The .map( row -> Person.class.cast( row[0] ) ) call should be avoided and
we should return a Stream<Person> in this case.
Vlad
On Tue, Jun 7, 2016 at 12:50 PM, Vlad Mihalcea <mihalcea.vlad at gmail.com>
wrote:
> Hi,
>
> While writing documentation for the new 5.2 Query.stream() API, I realized
> that we don't return a Stream<T>, but a Stream<Object[]> which could
> confuse users.
> This is because ScrollableResultsImpl does something like this:
>
> if ( result != null && result.getClass().isArray() ) {
> currentRow = (Object[]) result;
> }
> else {
> currentRow = new Object[] {result};
> }
>
> The result is the actual entity that we queries, while the currentRow is an Object[].
>
> I think we might want to change the stream result so that we return the result for each available entry.
>
> Vlad
>
More information about the hibernate-dev
mailing list