diff --git a/querydsl-core/src/main/java/com/mysema/query/SimpleProjectable.java b/querydsl-core/src/main/java/com/mysema/query/SimpleProjectable.java index c06bf81b3..6f287bb5e 100644 --- a/querydsl-core/src/main/java/com/mysema/query/SimpleProjectable.java +++ b/querydsl-core/src/main/java/com/mysema/query/SimpleProjectable.java @@ -9,6 +9,8 @@ import java.util.List; import javax.annotation.Nullable; +import com.mysema.commons.lang.CloseableIterator; + /** * SimpleProjectable defines a simpler projection interface than {@link Projectable}. * @@ -16,6 +18,13 @@ import javax.annotation.Nullable; * @see Projectable */ public interface SimpleProjectable { + + /** + * Get the projection as a typed closeable Iterator + * + * @return + */ + CloseableIterator iterate(); /** * Get the projection as a typed List diff --git a/querydsl-core/src/main/java/com/mysema/query/support/SimpleQueryAdapter.java b/querydsl-core/src/main/java/com/mysema/query/support/SimpleQueryAdapter.java index 2513bfebf..e0e937b24 100644 --- a/querydsl-core/src/main/java/com/mysema/query/support/SimpleQueryAdapter.java +++ b/querydsl-core/src/main/java/com/mysema/query/support/SimpleQueryAdapter.java @@ -7,6 +7,7 @@ package com.mysema.query.support; import java.util.List; +import com.mysema.commons.lang.CloseableIterator; import com.mysema.query.Projectable; import com.mysema.query.Query; import com.mysema.query.QueryModifiers; @@ -62,6 +63,11 @@ public class SimpleQueryAdapter implements SimpleQuery> query.limit(limit); return this; } + + @Override + public CloseableIterator iterate(){ + return projectable.iterate(projection); + } @Override public List list() { diff --git a/querydsl-hibernate-search/src/main/java/com/mysema/query/search/SearchQuery.java b/querydsl-hibernate-search/src/main/java/com/mysema/query/search/SearchQuery.java index 1dca08711..b38181940 100644 --- a/querydsl-hibernate-search/src/main/java/com/mysema/query/search/SearchQuery.java +++ b/querydsl-hibernate-search/src/main/java/com/mysema/query/search/SearchQuery.java @@ -13,6 +13,8 @@ import org.hibernate.search.FullTextSession; import org.hibernate.search.Search; import com.mysema.commons.lang.Assert; +import com.mysema.commons.lang.CloseableIterator; +import com.mysema.commons.lang.IteratorAdapter; import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; import com.mysema.query.SearchResults; @@ -87,6 +89,11 @@ public class SearchQuery implements SimpleQuery>, SimpleProjec } return fullTextQuery; } + + @SuppressWarnings("unchecked") + public CloseableIterator iterate(){ + return new IteratorAdapter(createQuery(false).iterate()); + } @Override public SearchQuery limit(long limit) { diff --git a/querydsl-lucene/src/main/java/com/mysema/query/lucene/LuceneQuery.java b/querydsl-lucene/src/main/java/com/mysema/query/lucene/LuceneQuery.java index 6ec4e0ade..f6455f63f 100644 --- a/querydsl-lucene/src/main/java/com/mysema/query/lucene/LuceneQuery.java +++ b/querydsl-lucene/src/main/java/com/mysema/query/lucene/LuceneQuery.java @@ -15,6 +15,8 @@ import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.Searcher; import org.apache.lucene.search.Sort; +import com.mysema.commons.lang.CloseableIterator; +import com.mysema.commons.lang.IteratorAdapter; import com.mysema.query.QueryException; import com.mysema.query.QueryMetadata; import com.mysema.query.QueryModifiers; @@ -78,6 +80,11 @@ public class LuceneQuery implements SimpleQuery, SimpleProjectable< public LuceneQuery limit(long limit) { return queryMixin.limit(limit); } + + public CloseableIterator iterate(){ + // TODO : optimize + return new IteratorAdapter(list().iterator()); + } @Override public List list() {