Class JpaPagingItemReader<T>

  • All Implemented Interfaces:
    ItemReader<T>, ItemStream, ItemStreamReader<T>, org.springframework.beans.factory.InitializingBean

    public class JpaPagingItemReader<T>
    extends AbstractPagingItemReader<T>

    ItemReader for reading database records built on top of JPA.

    It executes the JPQL setQueryString(String) to retrieve requested data. The query is executed using paged requests of a size specified in AbstractPagingItemReader.setPageSize(int). Additional pages are requested when needed as AbstractItemCountingItemStreamItemReader.read() method is called, returning an object corresponding to current position.

    The performance of the paging depends on the JPA implementation and its use of database specific features to limit the number of returned rows.

    Setting a fairly large page size and using a commit interval that matches the page size should provide better performance.

    In order to reduce the memory usage for large results the persistence context is flushed and cleared after each page is read. This causes any entities read to be detached. If you make changes to the entities and want the changes persisted then you must explicitly merge the entities.

    The reader must be configured with an EntityManagerFactory. All entity access is performed within a new transaction, independent of any existing Spring managed transactions.

    The implementation is thread-safe in between calls to AbstractItemCountingItemStreamItemReader.open(ExecutionContext), but remember to use saveState=false if used in a multi-threaded client (no restart available).

    Since:
    2.0
    Author:
    Thomas Risberg, Dave Syer, Will Schipp
    • Constructor Detail

      • JpaPagingItemReader

        public JpaPagingItemReader()
    • Method Detail

      • setEntityManagerFactory

        public void setEntityManagerFactory​(javax.persistence.EntityManagerFactory entityManagerFactory)
      • setParameterValues

        public void setParameterValues​(java.util.Map<java.lang.String,​java.lang.Object> parameterValues)
        The parameter values to be used for the query execution.
        Parameters:
        parameterValues - the values keyed by the parameter named used in the query string.
      • setTransacted

        public void setTransacted​(boolean transacted)
        By default (true) the EntityTransaction will be started and committed around the read. Can be overridden (false) in cases where the JPA implementation doesn't support a particular transaction. (e.g. Hibernate with a JTA transaction). NOTE: may cause problems in guaranteeing the object consistency in the EntityManagerFactory.
        Parameters:
        transacted - indicator
      • afterPropertiesSet

        public void afterPropertiesSet()
                                throws java.lang.Exception
        Description copied from class: AbstractPagingItemReader
        Check mandatory properties.
        Specified by:
        afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
        Overrides:
        afterPropertiesSet in class AbstractPagingItemReader<T>
        Throws:
        java.lang.Exception
        See Also:
        InitializingBean.afterPropertiesSet()
      • setQueryString

        public void setQueryString​(java.lang.String queryString)
        Parameters:
        queryString - JPQL query string
      • setQueryProvider

        public void setQueryProvider​(JpaQueryProvider queryProvider)
        Parameters:
        queryProvider - JPA query provider