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

- ## Method Summary

  Modifier and Type
  Method
  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(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<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.
  `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 Details

  - ### HibernateCursorItemReader

    public HibernateCursorItemReader()

- ## Method Details

  - ### afterPropertiesSet

    public void afterPropertiesSet() throws Exception
    Specified by:
      `afterPropertiesSet` in interface `org.springframework.beans.factory.InitializingBean`
    Throws:
      `Exception`

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

  - ### doRead

    @Nullable protected T doRead() throws 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:
      `Exception` - Allows subclasses to throw checked exceptions for interpretation by the framework

  - ### doOpen

    protected void doOpen() throws Exception
    Open hibernate session and create a forward-only cursor for the query.
    Specified by:
      `doOpen` in class `AbstractItemCountingItemStreamItemReader<T>`
    Throws:
      `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 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:
      `Exception` - if there is a problem
    See Also:
      - `AbstractItemCountingItemStreamItemReader.jumpToItem(int)`

  - ### doClose

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