org.springframework.batch.item.database
Class HibernateCursorItemReader<T>

java.lang.Object
  extended by org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader<T>
      extended by org.springframework.batch.item.database.HibernateCursorItemReader<T>
All Implemented Interfaces:
ItemReader<T>, ItemStream, ItemStreamReader<T>, InitializingBean

public class HibernateCursorItemReader<T>
extends AbstractItemCountingItemStreamItemReader<T>
implements ItemStream, InitializingBean

ItemReader 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
HibernateCursorItemReader()
           
 
Method Summary
 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 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, getExecutionContextUserSupport, isSaveState, open, read, setCurrentItemCount, setMaxItemCount, setName, setSaveState
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.springframework.batch.item.ItemStream
close, open
 

Constructor Detail

HibernateCursorItemReader

public HibernateCursorItemReader()
Method Detail

afterPropertiesSet

public void afterPropertiesSet()
                        throws Exception
Specified by:
afterPropertiesSet in interface 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 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

protected T doRead()
            throws Exception
Description copied from class: AbstractItemCountingItemStreamItemReader
Read next item from input.

Specified by:
doRead in class AbstractItemCountingItemStreamItemReader<T>
Returns:
item
Throws:
Exception

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

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

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


Copyright © 2013 SpringSource. All Rights Reserved.