Package 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
  Description
  `HibernatePagingItemReader()`

- ## Method Summary

  Modifier and Type
  Method
  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(Map<String,Object> parameterValues)`
  The parameter values to apply to a query (map of name:value).
  `void`
  `setQueryName(String queryName)`
  A query name for an externalized query.
  `void`
  `setQueryProvider(HibernateQueryProvider<? extends T> queryProvider)`
  A query provider.
  `void`
  `setQueryString(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 Details

  - ### HibernatePagingItemReader

    public HibernatePagingItemReader()

- ## Method Details

  - ### setParameterValues

    public void setParameterValues(Map<String,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(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<? extends T> 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(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 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:
      `Exception`
    See Also:
      - `InitializingBean.afterPropertiesSet()`

  - ### doOpen

    protected void doOpen() throws Exception
    Description copied from class: `AbstractItemCountingItemStreamItemReader`
    Open resources necessary to start reading input.
    Overrides:
      `doOpen` in class `AbstractPagingItemReader<T>`
    Throws:
      `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 Exception
    Description copied from class: `AbstractItemCountingItemStreamItemReader`
    Close the resources opened in `AbstractItemCountingItemStreamItemReader.doOpen()`.
    Overrides:
      `doClose` in class `AbstractPagingItemReader<T>`
    Throws:
      `Exception` - Allows subclasses to throw checked exceptions for interpretation by the framework