Hi,
another change I'd like to propose is an addition of
getResultStream:Stream method to javax.persistence.Query/TypedQuery
interfaces with following javadoc and provided with default implementation:
javax.persistence.Query:
/ /**//
// * Execute a SELECT query and return the query results//
// * as an untyped <code>java.util.Stream</code>.//
// * By default this method delegates to
<code>getResultList().stream()</code>,//
// * however persistence provider may choose to override this method//
// * to provide additional capabilities.//
// *//
// * @return a stream of the results//
// * @throws IllegalStateException if called for a Java//
// * Persistence query language UPDATE or DELETE statement//
// * @throws QueryTimeoutException if the query execution exceeds//
// * the query timeout value set and only the statement is//
// * rolled back//
// * @throws TransactionRequiredException if a lock mode other than//
// * <code>NONE</code> has been set and there is no
transaction//
// * or the persistence context has not been joined to the
transaction//
// * @throws PessimisticLockException if pessimistic locking//
// * fails and the transaction is rolled back//
// * @throws LockTimeoutException if pessimistic locking//
// * fails and only the statement is rolled back//
// * @throws PersistenceException if the query execution exceeds //
// * the query timeout value set and the transaction //
// * is rolled back //
// * @see Stream//
// * @see #getResultList()//
// * @since 2.2//
// *///
// default Stream getResultStream() {//
// return getResultList().stream();//
// }/
similarly to javax.persistence.TypedQuery:
/ /**//
// * Execute a SELECT query and return the query results//
// * as a typed <code>java.util.Stream</code>.//
// * By default this method delegates to
<code>getResultList().stream()</code>,//
// * however persistence provider may choose to override this method//
// * to provide additional capabilities.//
// *//
// * @return a stream of the results//
// * @throws IllegalStateException if called for a Java//
// * Persistence query language UPDATE or DELETE statement//
// * @throws QueryTimeoutException if the query execution exceeds//
// * the query timeout value set and only the statement is//
// * rolled back//
// * @throws TransactionRequiredException if a lock mode other than//
// * <code>NONE</code> has been set and there is no
transaction//
// * or the persistence context has not been joined to the
transaction//
// * @throws PessimisticLockException if pessimistic locking//
// * fails and the transaction is rolled back//
// * @throws LockTimeoutException if pessimistic locking//
// * fails and only the statement is rolled back//
// * @throws PersistenceException if the query execution exceeds //
// * the query timeout value set and the transaction //
// * is rolled back //
// * @see Stream//
// * @see #getResultList()//
// * @since 2.2//
// *///
// default Stream<X> getResultStream() {//
// return getResultList().stream();//
// }/
Do you think this is OK or does it give providers to big freedom?
Thank you,
--lukas