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

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

public class JpaPagingItemReader<T>
extends AbstractPagingItemReader<T>

ItemReader for reading database records built on top of JPA.

It executes the JPQL setQueryString(String) to retrieve requested data. The query is executed using paged requests of a size specified in AbstractPagingItemReader.setPageSize(int). Additional pages are requested when needed as AbstractItemCountingItemStreamItemReader.read() method is called, returning an object corresponding to current position.

The performance of the paging depends on the JPA implementation and its use of database specific features to limit the number of returned rows.

Setting a fairly large page size and using a commit interval that matches the page size should provide better performance.

In order to reduce the memory usage for large results the persistence context is flushed and cleared after each page is read. This causes any entities read to be detached. If you make changes to the entities and want the changes persisted then you must explicitly merge the entities.

The reader must be configured with an EntityManagerFactory. All entity access is performed within a new transaction, independent of any existing Spring managed transactions.

The implementation is thread-safe in between calls to AbstractItemCountingItemStreamItemReader.open(ExecutionContext), but remember to use saveState=false if used in a multi-threaded client (no restart available).

Since:
2.0
Author:
Thomas Risberg, Dave Syer

Field Summary
 
Fields inherited from class org.springframework.batch.item.database.AbstractPagingItemReader
logger, results
 
Constructor Summary
JpaPagingItemReader()
           
 
Method Summary
 void afterPropertiesSet()
          Check mandatory properties.
protected  void doClose()
          Close the resources opened in AbstractItemCountingItemStreamItemReader.doOpen().
protected  void doJumpToPage(int itemIndex)
           
protected  void doOpen()
          Open resources necessary to start reading input.
protected  void doReadPage()
           
 void setEntityManagerFactory(EntityManagerFactory entityManagerFactory)
           
 void setParameterValues(Map<String,Object> parameterValues)
          The parameter values to be used for the query execution.
 void setQueryProvider(JpaQueryProvider queryProvider)
           
 void setQueryString(String queryString)
           
 
Methods inherited from class org.springframework.batch.item.database.AbstractPagingItemReader
doRead, getPage, getPageSize, jumpToItem, setPageSize
 
Methods inherited from class org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader
close, getCurrentItemCount, getExecutionContextUserSupport, isSaveState, open, read, setCurrentItemCount, setMaxItemCount, setName, setSaveState, update
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JpaPagingItemReader

public JpaPagingItemReader()
Method Detail

setEntityManagerFactory

public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory)

setParameterValues

public void setParameterValues(Map<String,Object> parameterValues)
The parameter values to be used for the query execution.

Parameters:
parameterValues - the values keyed by the parameter named used in the query string.

afterPropertiesSet

public void afterPropertiesSet()
                        throws Exception
Description copied from class: AbstractPagingItemReader
Check mandatory properties.

Specified by:
afterPropertiesSet in interface InitializingBean
Overrides:
afterPropertiesSet in class AbstractPagingItemReader<T>
Throws:
Exception
See Also:
InitializingBean.afterPropertiesSet()

setQueryString

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

setQueryProvider

public void setQueryProvider(JpaQueryProvider queryProvider)
Parameters:
queryProvider - JPA query provider

doOpen

protected void doOpen()
               throws Exception
Description copied from class: AbstractItemCountingItemStreamItemReader
Open resources necessary to start reading input.

Overrides:
doOpen in class AbstractPagingItemReader<T>
Throws:
Exception

doReadPage

protected void doReadPage()
Specified by:
doReadPage in class AbstractPagingItemReader<T>

doJumpToPage

protected void doJumpToPage(int itemIndex)
Specified by:
doJumpToPage in class AbstractPagingItemReader<T>

doClose

protected void doClose()
                throws Exception
Description copied from class: AbstractItemCountingItemStreamItemReader
Close the resources opened in AbstractItemCountingItemStreamItemReader.doOpen().

Overrides:
doClose in class AbstractPagingItemReader<T>
Throws:
Exception


Copyright © 2013 SpringSource. All Rights Reserved.