From 6a51f4cc4533fcd38c6a7005b668cc035299461d Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 25 May 2016 15:02:56 +0200 Subject: [PATCH] DATAJPA-903 - Stream access on Hibernate only unwraps first element if one element array is returned. Previously we always picked the first element of the Object array returned by the Hibernate ScrollableResults. We now only do that for one element arrays to basically mimic the handling of List based query methods. --- .../data/jpa/provider/PersistenceProvider.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/springframework/data/jpa/provider/PersistenceProvider.java b/src/main/java/org/springframework/data/jpa/provider/PersistenceProvider.java index 35c28e8ec..777011cb4 100644 --- a/src/main/java/org/springframework/data/jpa/provider/PersistenceProvider.java +++ b/src/main/java/org/springframework/data/jpa/provider/PersistenceProvider.java @@ -115,7 +115,7 @@ public enum PersistenceProvider implements QueryExtractor,ProxyIdAccessor { */ @Override public CloseableIterator executeQueryWithResultStream(Query jpaQuery) { - return new HibernateScrollableResultsIterator(jpaQuery); + return new HibernateScrollableResultsIterator(jpaQuery); } }, @@ -197,6 +197,10 @@ public enum PersistenceProvider implements QueryExtractor,ProxyIdAccessor { return ((PersistenceCapable) entity).pcFetchObjectId(); } + /* + * (non-Javadoc) + * @see org.springframework.data.jpa.provider.PersistenceProvider#executeQueryWithResultStream(javax.persistence.Query) + */ @Override public CloseableIterator executeQueryWithResultStream(Query jpaQuery) { return new OpenJpaResultStreamingIterator(jpaQuery); @@ -396,8 +400,7 @@ public enum PersistenceProvider implements QueryExtractor,ProxyIdAccessor { * @param the domain type to return≠ * @since 1.8 */ - @SuppressWarnings("unchecked") - private static class HibernateScrollableResultsIterator implements CloseableIterator { + private static class HibernateScrollableResultsIterator implements CloseableIterator { private final ScrollableResults scrollableResults; @@ -419,8 +422,11 @@ public enum PersistenceProvider implements QueryExtractor,ProxyIdAccessor { * @see java.util.Iterator#next() */ @Override - public T next() { - return (T) scrollableResults.get()[0]; + public Object next() { + + Object[] row = scrollableResults.get(); + + return row.length == 1 ? row[0] : row; } /*