org.springframework.batch.item.database
Class HibernateCursorItemReader

java.lang.Object
  extended by org.springframework.batch.item.support.AbstractBufferedItemReaderItemStream
      extended by org.springframework.batch.item.database.HibernateCursorItemReader
All Implemented Interfaces:
ItemReader, ItemStream, InitializingBean

public class HibernateCursorItemReader
extends AbstractBufferedItemReaderItemStream
implements ItemStream, InitializingBean

ItemReader for reading database records built on top of Hibernate. It executes the HQL setQueryString(String) when initialized and iterates over the result set as AbstractBufferedItemReaderItemStream.read() method is called, returning an object corresponding to current row. 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 after successful commit without being flushed (no inserts or updates are expected). Reset(rollback) functionality is implemented by item buffering allowing the cursor used to be forward-only. 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 setQueryString(String).
protected  Object doRead()
          Read next item from input.
 void mark()
          Mark is supported as long as this ItemStream is used in a single-threaded environment.
 void setFetchSize(int fetchSize)
          Gives the JDBC driver a hint as to the number of rows that should be fetched from the database when more rows are needed for this ResultSet object.
 void setQueryString(String queryString)
           
 void setSessionFactory(org.hibernate.SessionFactory sessionFactory)
           
 void setUseStatelessSession(boolean useStatelessSession)
          Can be set only in uninitialized state.
 
Methods inherited from class org.springframework.batch.item.support.AbstractBufferedItemReaderItemStream
close, getCurrentItemCount, jumpToItem, open, read, reset, setCurrentItemCount, setName, setSaveState, update
 
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, update
 

Constructor Detail

HibernateCursorItemReader

public HibernateCursorItemReader()
Method Detail

setSessionFactory

public void setSessionFactory(org.hibernate.SessionFactory sessionFactory)
Parameters:
sessionFactory - hibernate session factory

afterPropertiesSet

public void afterPropertiesSet()
                        throws Exception
Specified by:
afterPropertiesSet in interface InitializingBean
Throws:
Exception

setQueryString

public void setQueryString(String queryString)
Parameters:
queryString - HQL query string

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

mark

public void mark()
Mark is supported as long as this ItemStream is used in a single-threaded environment. The state backing the mark is a single counter, keeping track of the current position, so multiple threads cannot be accommodated.

Specified by:
mark in interface ItemReader
Overrides:
mark in class AbstractBufferedItemReaderItemStream
See Also:
ItemReader.mark()

setFetchSize

public void setFetchSize(int fetchSize)
Gives the JDBC driver a hint as to the number of rows that should be fetched from the database when more rows are needed for this ResultSet object. If the fetch size specified is zero, the JDBC driver ignores the value.

Parameters:
fetchSize - the number of rows to fetch, 0 by default
See Also:
Query.setFetchSize(int)

doRead

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

Specified by:
doRead in class AbstractBufferedItemReaderItemStream
Returns:
item
Throws:
Exception

doOpen

protected void doOpen()
               throws Exception
Open hibernate session and create a forward-only cursor for the setQueryString(String).

Specified by:
doOpen in class AbstractBufferedItemReaderItemStream
Throws:
Exception

doClose

protected void doClose()
                throws Exception
Close the cursor and hibernate session.

Specified by:
doClose in class AbstractBufferedItemReaderItemStream
Throws:
Exception


Copyright © 2009 SpringSource. All Rights Reserved.