DATAJPA-677 - Add support for Java 8 Stream in repository finder methods.

Added support for Streaming query results in Hibernate, EclipseLink and OpenJPA by falling back to store specific APIs to execute the query.

Original pull request: #136.
This commit is contained in:
Thomas Darimont
2015-02-24 23:01:53 +01:00
committed by Oliver Gierke
parent 386c2a5ecd
commit 5a3d920532
5 changed files with 324 additions and 5 deletions

View File

@@ -28,6 +28,8 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
import java.util.stream.Stream;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@@ -1751,8 +1753,8 @@ public class UserRepositoryTests {
assertThat(users.getContent(), hasSize(2));
assertThat(users.getContent().get(0), is(thirdUser));
assertThat(users.getContent().get(1), is(fourthUser));
}
}
/**
* @see DATAJPA-629
*/
@@ -1816,6 +1818,66 @@ public class UserRepositoryTests {
assertThat(users.get(0), is(secondUser));
}
/**
* @see DATAJPA-677
*/
@Test
public void shouldSupportJava8StreamsForRepositoryFinderMethods() {
flushTestUsers();
Stream<User> stream = repository.findAllByCustomQueryAndStream();
final List<User> users = new ArrayList<User>();
try {
stream.forEach(new Consumer<User>() {
@Override
public void accept(User user) {
// System.out.printf("%s%n", user);
users.add(user);
}
});
} finally {
stream.close();
}
assertThat(users, hasSize(4));
}
/**
* @see DATAJPA-677
*/
@Test
public void shouldSupportJava8StreamsForRepositoryDerivedFinderMethods() {
flushTestUsers();
Stream<User> stream = repository.readAllByFirstnameNotNull();
final List<User> users = new ArrayList<User>();
try {
stream.forEach(new Consumer<User>() {
@Override
public void accept(User user) {
// System.out.printf("%s%n", user);
users.add(user);
}
});
} finally {
stream.close();
}
assertThat(users, hasSize(4));
}
private Page<User> executeSpecWithSort(Sort sort) {
flushTestUsers();

View File

@@ -19,6 +19,7 @@ import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.stream.Stream;
import javax.persistence.EntityManager;
import javax.persistence.QueryHint;
@@ -557,4 +558,15 @@ public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecifi
* DATAJPA-606
*/
List<User> queryByAgeInOrFirstname(Integer[] ages, String firstname);
/**
* DATAJPA-677
*/
@Query("select u from User u")
Stream<User> findAllByCustomQueryAndStream();
/**
* DATAJPA-677
*/
Stream<User> readAllByFirstnameNotNull();
}