public abstract class

JpaAccessor

extends EntityManagerFactoryAccessor
implements InitializingBean
java.lang.Object
   ↳ org.springframework.orm.jpa.EntityManagerFactoryAccessor
     ↳ org.springframework.orm.jpa.JpaAccessor
Known Direct Subclasses

Class Overview

Base class for JpaTemplate and JpaInterceptor, defining common properties such as EntityManagerFactory and flushing behavior.

Not intended to be used directly. See JpaTemplate and JpaInterceptor.

Summary

[Expand]
Inherited Fields
From class org.springframework.orm.jpa.EntityManagerFactoryAccessor
Public Constructors
JpaAccessor()
Public Methods
void afterPropertiesSet()
Eagerly initialize the JPA dialect, creating a default one for the specified EntityManagerFactory if none set.
EntityManager getEntityManager()
Return the JPA EntityManager to use.
JpaDialect getJpaDialect()
Return the JPA dialect to use for this accessor.
boolean isFlushEager()
Return if this accessor should flush changes to the database eagerly.
void setEntityManager(EntityManager entityManager)
Set the JPA EntityManager to use.
void setFlushEager(boolean flushEager)
Set if this accessor should flush changes to the database eagerly.
void setJpaDialect(JpaDialect jpaDialect)
Set the JPA dialect to use for this accessor.
RuntimeException translateIfNecessary(RuntimeException ex)
Convert the given runtime exception to an appropriate exception from the org.springframework.dao hierarchy if necessary, or return the exception itself if it is not persistence related

Default implementation delegates to the JpaDialect.

Protected Methods
void flushIfNecessary(EntityManager em, boolean existingTransaction)
Flush the given JPA entity manager if necessary.
[Expand]
Inherited Methods
From class org.springframework.orm.jpa.EntityManagerFactoryAccessor
From class java.lang.Object
From interface org.springframework.beans.factory.InitializingBean

Public Constructors

public JpaAccessor ()

Public Methods

public void afterPropertiesSet ()

Eagerly initialize the JPA dialect, creating a default one for the specified EntityManagerFactory if none set.

public EntityManager getEntityManager ()

Return the JPA EntityManager to use.

public JpaDialect getJpaDialect ()

Return the JPA dialect to use for this accessor.

Creates a default one for the specified EntityManagerFactory if none set.

public boolean isFlushEager ()

Return if this accessor should flush changes to the database eagerly.

public void setEntityManager (EntityManager entityManager)

Set the JPA EntityManager to use.

public void setFlushEager (boolean flushEager)

Set if this accessor should flush changes to the database eagerly.

Eager flushing leads to immediate synchronization with the database, even if in a transaction. This causes inconsistencies to show up and throw a respective exception immediately, and JDBC access code that participates in the same transaction will see the changes as the database is already aware of them then. But the drawbacks are:

  • additional communication roundtrips with the database, instead of a single batch at transaction commit;
  • the fact that an actual database rollback is needed if the JPA transaction rolls back (due to already submitted SQL statements).

public void setJpaDialect (JpaDialect jpaDialect)

Set the JPA dialect to use for this accessor.

The dialect object can be used to retrieve the underlying JDBC connection, for example.

public RuntimeException translateIfNecessary (RuntimeException ex)

Convert the given runtime exception to an appropriate exception from the org.springframework.dao hierarchy if necessary, or return the exception itself if it is not persistence related

Default implementation delegates to the JpaDialect. May be overridden in subclasses.

Parameters
ex runtime exception that occured, which may or may not be JPA-related
Returns
  • the corresponding DataAccessException instance if wrapping should occur, otherwise the raw exception

Protected Methods

protected void flushIfNecessary (EntityManager em, boolean existingTransaction)

Flush the given JPA entity manager if necessary.

Parameters
em the current JPA PersistenceManage
existingTransaction if executing within an existing transaction
Throws
in case of JPA flushing errors
PersistenceException