org.springframework.batch.item.database

## Class HibernateCursorItemReader<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.HibernateCursorItemReader<T>

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

      public class HibernateCursorItemReader<T>
      extends AbstractItemCountingItemStreamItemReader<T>
      implements org.springframework.beans.factory.InitializingBean

  `ItemStreamReader` for reading database records built on top of Hibernate. It executes the HQL query when initialized iterates over the result set as `AbstractItemCountingItemStreamItemReader.read()` method is called, returning an object corresponding to current row. 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 `update(ExecutionContext)` method without being flushed (no data modifications are expected).

  The implementation is not thread-safe.
  Author:
    Robert Kasanicky, Dave Syer

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `HibernateCursorItemReader()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterPropertiesSet()`
    `protected void` | `doClose()` Close the cursor and hibernate session.
    `protected void` | `doOpen()` Open hibernate session and create a forward-only cursor for the query.
    `protected T` | `doRead()` Read next item from input.
    `protected void` | `jumpToItem(int itemIndex)` Wind forward through the result set to the item requested.
    `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<T> 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.
    `void` | `update(ExecutionContext executionContext)` Update the context and clear the session if stateful.

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

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

    - ### 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

    - #### HibernateCursorItemReader

          public HibernateCursorItemReader()

  - ### Method Detail

    - #### afterPropertiesSet

          public void afterPropertiesSet()
                                  throws java.lang.Exception

      Specified by:
        `afterPropertiesSet` in interface `org.springframework.beans.factory.InitializingBean`
      Throws:
        `java.lang.Exception`

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

    - #### doRead

          @Nullable
          protected T doRead()
                                throws java.lang.Exception

      Description copied from class: `AbstractItemCountingItemStreamItemReader`
      Read next item from input.
      Specified by:
        `doRead` in class `AbstractItemCountingItemStreamItemReader<T>`
      Returns:
        an item or `null` if the data source is exhausted
      Throws:
        `java.lang.Exception` - Allows subclasses to throw checked exceptions for interpretation by the framework

    - #### doOpen

          protected void doOpen()
                         throws java.lang.Exception

      Open hibernate session and create a forward-only cursor for the query.
      Specified by:
        `doOpen` in class `AbstractItemCountingItemStreamItemReader<T>`
      Throws:
        `java.lang.Exception` - Allows subclasses to throw checked exceptions for interpretation by the framework

    - #### update

          public void update(ExecutionContext executionContext)
                      throws ItemStreamException

      Update the context and clear the session if stateful.
      Specified by:
        `update` in interface `ItemStream`
      Overrides:
        `update` in class `AbstractItemCountingItemStreamItemReader<T>`
      Parameters:
        `executionContext` - the current `ExecutionContext`
      Throws:
        `ItemStreamException` - if there is a problem
      See Also:
        `ItemStream.update(ExecutionContext)`

    - #### jumpToItem

          protected void jumpToItem(int itemIndex)
                             throws java.lang.Exception

      Wind forward through the result set to the item requested. Also clears the session every now and then (if stateful) to avoid memory problems. The frequency of session clearing is the larger of the fetch size (if set) and 100.
      Overrides:
        `jumpToItem` in class `AbstractItemCountingItemStreamItemReader<T>`
      Parameters:
        `itemIndex` - the first item to read
      Throws:
        `java.lang.Exception` - if there is a problem
      See Also:
        `AbstractItemCountingItemStreamItemReader.jumpToItem(int)`

    - #### doClose

          protected void doClose()
                          throws java.lang.Exception

      Close the cursor and hibernate session.
      Specified by:
        `doClose` in class `AbstractItemCountingItemStreamItemReader<T>`
      Throws:
        `java.lang.Exception` - Allows subclasses to throw checked exceptions for interpretation by the framework