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).
- Author:
- Robert Kasanicky, Dave Syer
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidprotected voiddoClose()Close the cursor and hibernate session.protected voiddoOpen()Open hibernate session and create a forward-only cursor for the query.protected TdoRead()Read next item from input.protected voidjumpToItem(int itemIndex) Wind forward through the result set to the item requested.voidsetFetchSize(int fetchSize) Fetch size used internally by Hibernate to limit amount of data fetched from database per round trip.voidsetParameterValues(Map<String, Object> parameterValues) The parameter values to apply to a query (map of name:value).voidsetQueryName(String queryName) A query name for an externalized query.voidsetQueryProvider(HibernateQueryProvider<T> queryProvider) A query provider.voidsetQueryString(String queryString) A query string in HQL.voidsetSessionFactory(org.hibernate.SessionFactory sessionFactory) The Hibernate SessionFactory to use the create a session.voidsetUseStatelessSession(boolean useStatelessSession) Can be set only in uninitialized state.voidupdate(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, setSaveStateMethods inherited from class org.springframework.batch.item.ItemStreamSupport
getExecutionContextKey, setExecutionContextName, setName
-
Constructor Details
-
HibernateCursorItemReader
public HibernateCursorItemReader()
-
-
Method Details
-
afterPropertiesSet
- Specified by:
afterPropertiesSetin interfaceorg.springframework.beans.factory.InitializingBean- Throws:
Exception
-
setParameterValues
The parameter values to apply to a query (map of name:value).- Parameters:
parameterValues- the parameter values to set
-
setQueryName
A query name for an externalized query. Either this or the {query stringor the {query providershould 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
A query provider. Either this or the {query stringor the {query nameshould be set.- Parameters:
queryProvider- Hibernate query provider
-
setQueryString
A query string in HQL. Either this or the {query provideror the {query nameshould 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- theSessionFactoryto set
-
setUseStatelessSession
public void setUseStatelessSession(boolean useStatelessSession) Can be set only in uninitialized state.- Parameters:
useStatelessSession-trueto useStatelessSessionfalseto use standard hibernateSession
-
doRead
Description copied from class:AbstractItemCountingItemStreamItemReaderRead next item from input.- Specified by:
doReadin classAbstractItemCountingItemStreamItemReader<T>- Returns:
- an item or
nullif the data source is exhausted - Throws:
Exception- Allows subclasses to throw checked exceptions for interpretation by the framework
-
doOpen
Open hibernate session and create a forward-only cursor for the query.- Specified by:
doOpenin classAbstractItemCountingItemStreamItemReader<T>- Throws:
Exception- Allows subclasses to throw checked exceptions for interpretation by the framework
-
update
Update the context and clear the session if stateful.- Specified by:
updatein interfaceItemStream- Overrides:
updatein classAbstractItemCountingItemStreamItemReader<T>- Parameters:
executionContext- the currentExecutionContext- Throws:
ItemStreamException- if there is a problem- See Also:
-
jumpToItem
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:
jumpToItemin classAbstractItemCountingItemStreamItemReader<T>- Parameters:
itemIndex- the first item to read- Throws:
Exception- if there is a problem- See Also:
-
doClose
Close the cursor and hibernate session.- Specified by:
doClosein classAbstractItemCountingItemStreamItemReader<T>- Throws:
Exception- Allows subclasses to throw checked exceptions for interpretation by the framework
-