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:
committed by
Oliver Gierke
parent
386c2a5ecd
commit
5a3d920532
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user