org.springframework.batch.item.database

## Class HibernatePagingItemReader<T>

- java.lang.Object
- - org.springframework.batch.item.ItemStreamSupport
  - - org.springframework.batch.item.support.AbstractItemStreamItemReader<T>
    - - org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader<T>
      - - org.springframework.batch.item.database.AbstractPagingItemReader<T>
        - - org.springframework.batch.item.database.HibernatePagingItemReader<T>

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

      public class HibernatePagingItemReader<T>
      extends AbstractPagingItemReader<T>
      implements org.springframework.beans.factory.InitializingBean

  `ItemReader` for reading database records built on top of Hibernate and reading only up to a fixed number of items at a time. It executes an HQL query when initialized is paged as the `AbstractItemCountingItemStreamItemReader.read()` method is called. The query can be set directly using `setQueryString(String)`, a named query can be used by `setQueryName(String)`, or a query provider strategy can be supplied via `setQueryProvider(HibernateQueryProvider)`.

  The reader can be configured to use either `StatelessSession` sufficient for simple mappings without the need to cascade to associated objects or standard hibernate `Session` for more advanced mappings or when caching is desired. When stateful session is used it will be cleared in the `AbstractItemCountingItemStreamItemReader.update(ExecutionContext)` method without being flushed (no data modifications are expected).

  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.1
  Author:
    Dave Syer

- - ### Field Summary

    - ### Fields inherited from class org.springframework.batch.item.database.AbstractPagingItemReader

      `logger, results`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `HibernatePagingItemReader()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterPropertiesSet()` Check mandatory properties.
    `protected void` | `doClose()` Close the resources opened in `AbstractItemCountingItemStreamItemReader.doOpen()`.
    `protected void` | `doJumpToPage(int itemIndex)`
    `protected void` | `doOpen()` Open resources necessary to start reading input.
    `protected void` | `doReadPage()`
    `void` | `setFetchSize(int fetchSize)` Fetch size used internally by Hibernate to limit amount of data fetched from database per round trip.
    `void` | `setParameterValues(java.util.Map<java.lang.String,java.lang.Object> parameterValues)` The parameter values to apply to a query (map of name:value).
    `void` | `setQueryName(java.lang.String queryName)` A query name for an externalized query.
    `void` | `setQueryProvider(HibernateQueryProvider queryProvider)` A query provider.
    `void` | `setQueryString(java.lang.String queryString)` A query string in HQL.
    `void` | `setSessionFactory(org.hibernate.SessionFactory sessionFactory)` The Hibernate SessionFactory to use the create a session.
    `void` | `setUseStatelessSession(boolean useStatelessSession)` Can be set only in uninitialized state.

    - ### Methods inherited from class org.springframework.batch.item.database.AbstractPagingItemReader

      `doRead, getPage, getPageSize, jumpToItem, setPageSize`

    - ### Methods inherited from class org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader

      `close, getCurrentItemCount, isSaveState, open, read, setCurrentItemCount, setMaxItemCount, setSaveState, update`

    - ### Methods inherited from class org.springframework.batch.item.ItemStreamSupport

      `getExecutionContextKey, setExecutionContextName, setName`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### HibernatePagingItemReader

          public HibernatePagingItemReader()

  - ### Method Detail

    - #### setParameterValues

          public void setParameterValues(java.util.Map<java.lang.String,java.lang.Object> parameterValues)

      The parameter values to apply to a query (map of name:value).
      Parameters:
        `parameterValues` - the parameter values to set

    - #### setQueryName

          public void setQueryName(java.lang.String queryName)

      A query name for an externalized query. Either this or the { `query string` or the { `query provider` should be set.
      Parameters:
        `queryName` - name of a hibernate named query

    - #### setFetchSize

          public void setFetchSize(int fetchSize)

      Fetch size used internally by Hibernate to limit amount of data fetched from database per round trip.
      Parameters:
        `fetchSize` - the fetch size to pass down to Hibernate

    - #### setQueryProvider

          public void setQueryProvider(HibernateQueryProvider queryProvider)

      A query provider. Either this or the {`query string` or the {`query name` should be set.
      Parameters:
        `queryProvider` - Hibernate query provider

    - #### setQueryString

          public void setQueryString(java.lang.String queryString)

      A query string in HQL. Either this or the { `query provider` or the { `query name` should be set.
      Parameters:
        `queryString` - HQL query string

    - #### setSessionFactory

          public void setSessionFactory(org.hibernate.SessionFactory sessionFactory)

      The Hibernate SessionFactory to use the create a session.
      Parameters:
        `sessionFactory` - the `SessionFactory` to set

    - #### setUseStatelessSession

          public void setUseStatelessSession(boolean useStatelessSession)

      Can be set only in uninitialized state.
      Parameters:
        `useStatelessSession` - `true` to use `StatelessSession` `false` to use standard hibernate `Session`

    - #### 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()`

    - #### doOpen

          protected void doOpen()
                         throws java.lang.Exception

      Description copied from class: `AbstractItemCountingItemStreamItemReader`
      Open resources necessary to start reading input.
      Overrides:
        `doOpen` in class `AbstractPagingItemReader<T>`
      Throws:
        `java.lang.Exception` - Allows subclasses to throw checked exceptions for interpretation by the framework

    - #### doReadPage

          protected void doReadPage()

      Specified by:
        `doReadPage` in class `AbstractPagingItemReader<T>`

    - #### doJumpToPage

          protected void doJumpToPage(int itemIndex)

      Specified by:
        `doJumpToPage` in class `AbstractPagingItemReader<T>`

    - #### doClose

          protected void doClose()
                          throws java.lang.Exception

      Description copied from class: `AbstractItemCountingItemStreamItemReader`
      Close the resources opened in `AbstractItemCountingItemStreamItemReader.doOpen()`.
      Overrides:
        `doClose` in class `AbstractPagingItemReader<T>`
      Throws:
        `java.lang.Exception` - Allows subclasses to throw checked exceptions for interpretation by the framework