This change seems very valuable and welcome, for sure.
Regards,
Michael
On Thu, May 4, 2017 at 5:01 PM, Lukas Jungmann <lukas.jungmann_at_oracle.com>
wrote:
> 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
>