Class JpaPagingItemReader<T>
- All Implemented Interfaces:
ItemReader<T>,ItemStream,ItemStreamReader<T>,org.springframework.beans.factory.InitializingBean
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, Will Schipp, Mahmoud Ben Hassine
-
Field Summary
Fields inherited from class org.springframework.batch.item.database.AbstractPagingItemReader
logger, results -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidCheck mandatory properties.protected voiddoClose()Close the resources opened inAbstractItemCountingItemStreamItemReader.doOpen().protected voiddoOpen()Open resources necessary to start reading input.protected voidvoidsetEntityManagerFactory(jakarta.persistence.EntityManagerFactory entityManagerFactory) voidsetParameterValues(Map<String, Object> parameterValues) The parameter values to be used for the query execution.voidsetQueryProvider(JpaQueryProvider queryProvider) voidsetQueryString(String queryString) voidsetTransacted(boolean transacted) By default (true) the EntityTransaction will be started and committed around the read.Methods inherited from class org.springframework.batch.item.database.AbstractPagingItemReader
doRead, getPage, getPageSize, jumpToItem, setPageSizeMethods inherited from class org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader
close, getCurrentItemCount, isSaveState, open, read, setCurrentItemCount, setMaxItemCount, setSaveState, updateMethods inherited from class org.springframework.batch.item.ItemStreamSupport
getExecutionContextKey, getName, setExecutionContextName, setName
-
Constructor Details
-
JpaPagingItemReader
public JpaPagingItemReader()
-
-
Method Details
-
setEntityManagerFactory
public void setEntityManagerFactory(jakarta.persistence.EntityManagerFactory entityManagerFactory) -
setParameterValues
The parameter values to be used for the query execution.- Parameters:
parameterValues- the values keyed by the parameter named used in the query string.
-
setTransacted
public void setTransacted(boolean transacted) By default (true) the EntityTransaction will be started and committed around the read. Can be overridden (false) in cases where the JPA implementation doesn't support a particular transaction. (e.g. Hibernate with a JTA transaction). NOTE: may cause problems in guaranteeing the object consistency in the EntityManagerFactory.- Parameters:
transacted- indicator
-
afterPropertiesSet
Description copied from class:AbstractPagingItemReaderCheck mandatory properties.- Specified by:
afterPropertiesSetin interfaceorg.springframework.beans.factory.InitializingBean- Overrides:
afterPropertiesSetin classAbstractPagingItemReader<T>- Throws:
Exception- See Also:
-
InitializingBean.afterPropertiesSet()
-
setQueryString
- Parameters:
queryString- JPQL query string
-
setQueryProvider
- Parameters:
queryProvider- JPA query provider
-
doOpen
Description copied from class:AbstractItemCountingItemStreamItemReaderOpen resources necessary to start reading input.- Overrides:
doOpenin classAbstractPagingItemReader<T>- Throws:
Exception- Allows subclasses to throw checked exceptions for interpretation by the framework
-
doReadPage
protected void doReadPage()- Specified by:
doReadPagein classAbstractPagingItemReader<T>
-
doClose
Description copied from class:AbstractItemCountingItemStreamItemReaderClose the resources opened inAbstractItemCountingItemStreamItemReader.doOpen().- Overrides:
doClosein classAbstractPagingItemReader<T>- Throws:
Exception- Allows subclasses to throw checked exceptions for interpretation by the framework
-