Package org.springframework.batch.item.database

# Class JpaItemWriter<T>

java.lang.Object
org.springframework.batch.item.database.JpaItemWriter<T>

All Implemented Interfaces:
  `ItemWriter<T>`, `org.springframework.beans.factory.InitializingBean`

public class JpaItemWriter<T> extends Object implements ItemWriter<T>, org.springframework.beans.factory.InitializingBean
`ItemWriter` that is using a JPA EntityManagerFactory to merge any Entities that aren't part of the persistence context. It is required that `write(List)` is called inside a transaction.
The reader must be configured with an `EntityManagerFactory` that is capable of participating in Spring managed transactions. The writer is thread-safe after its properties are set (normal singleton behaviour), so it can be used to write in multiple concurrent transactions.

Author:
  Thomas Risberg, Mahmoud Ben Hassine

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected static final org.apache.commons.logging.Log`
  `logger`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `JpaItemWriter()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `afterPropertiesSet()`
  Check mandatory properties - there must be an entityManagerFactory.
  `protected void`
  `doWrite(jakarta.persistence.EntityManager entityManager, List<? extends T> items)`
  Do perform the actual write operation.
  `void`
  `setEntityManagerFactory(jakarta.persistence.EntityManagerFactory entityManagerFactory)`
  Set the EntityManager to be used internally.
  `void`
  `setUsePersist(boolean usePersist)`
  Set whether the EntityManager should perform a persist instead of a merge.
  `void`
  `write(List<? extends T> items)`
  Merge all provided items that aren't already in the persistence context and then flush the entity manager.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### logger

    protected static final org.apache.commons.logging.Log logger

- ## Constructor Details

  - ### JpaItemWriter

    public JpaItemWriter()

- ## Method Details

  - ### setEntityManagerFactory

    public void setEntityManagerFactory(jakarta.persistence.EntityManagerFactory entityManagerFactory)
    Set the EntityManager to be used internally.
    Parameters:
      `entityManagerFactory` - the entityManagerFactory to set

  - ### setUsePersist

    public void setUsePersist(boolean usePersist)
    Set whether the EntityManager should perform a persist instead of a merge.
    Parameters:
      `usePersist` - whether to use persist instead of merge.

  - ### afterPropertiesSet

    public void afterPropertiesSet() throws Exception
    Check mandatory properties - there must be an entityManagerFactory.
    Specified by:
      `afterPropertiesSet` in interface `org.springframework.beans.factory.InitializingBean`
    Throws:
      `Exception`

  - ### write

    public void write(List<? extends T> items)
    Merge all provided items that aren't already in the persistence context and then flush the entity manager.
    Specified by:
      `write` in interface `ItemWriter<T>`
    Parameters:
      `items` - items to be written
    See Also:
      - `ItemWriter.write(java.util.List)`

  - ### doWrite

    protected void doWrite(jakarta.persistence.EntityManager entityManager, List<? extends T> items)
    Do perform the actual write operation. This can be overridden in a subclass if necessary.
    Parameters:
      `entityManager` - the EntityManager to use for the operation
      `items` - the list of items to use for the write