Save This Page
Home » spring-framework-2.5.4 » org.springframework » orm » jpa » [javadoc | source]
org.springframework.orm.jpa
public class: JpaInterceptor [javadoc | source]
java.lang.Object
   org.springframework.orm.jpa.EntityManagerFactoryAccessor
      org.springframework.orm.jpa.JpaAccessor
         org.springframework.orm.jpa.JpaInterceptor

All Implemented Interfaces:
    org.aopalliance.intercept.MethodInterceptor, InitializingBean

This interceptor binds a new JPA EntityManager to the thread before a method call, closing and removing it afterwards in case of any method outcome. If there already is a pre-bound EntityManager (e.g. from JpaTransactionManager, or from a surrounding JPA-intercepted method), the interceptor simply participates in it.

Application code must retrieve a JPA EntityManager via the EntityManagerFactoryUtils.getEntityManager method or - preferably - via a shared EntityManager reference, to be able to detect a thread-bound EntityManager. Typically, the code will look like as follows:

public void doSomeDataAccessAction() {
this.entityManager...
}

Note that this interceptor automatically translates PersistenceExceptions, via delegating to the EntityManagerFactoryUtils.convertJpaAccessException method that converts them to exceptions that are compatible with the org.springframework.dao exception hierarchy (like JpaTemplate does).

This class can be considered a declarative alternative to JpaTemplate's callback approach. The advantages are:

The drawback is the dependency on interceptor configuration. However, note that this interceptor is usually not necessary in scenarios where the data access code always executes within transactions. A transaction will always have a thread-bound EntityManager in the first place, so adding this interceptor to the configuration just adds value when fine-tuning EntityManager settings like the flush mode - or when relying on exception translation.

Fields inherited from org.springframework.orm.jpa.EntityManagerFactoryAccessor:
logger
Method from org.springframework.orm.jpa.JpaInterceptor Summary:
invoke,   setExceptionConversionEnabled
Methods from org.springframework.orm.jpa.JpaAccessor:
afterPropertiesSet,   flushIfNecessary,   getEntityManager,   getJpaDialect,   isFlushEager,   setEntityManager,   setFlushEager,   setJpaDialect,   translateIfNecessary
Methods from org.springframework.orm.jpa.EntityManagerFactoryAccessor:
createEntityManager,   getEntityManagerFactory,   getJpaPropertyMap,   getTransactionalEntityManager,   setEntityManagerFactory,   setJpaProperties,   setJpaPropertyMap
Methods from java.lang.Object:
equals,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from org.springframework.orm.jpa.JpaInterceptor Detail:
 public Object invoke(MethodInvocation methodInvocation) throws Throwable 
 public  void setExceptionConversionEnabled(boolean exceptionConversionEnabled) 
    Set whether to convert any PersistenceException raised to a Spring DataAccessException, compatible with the org.springframework.dao exception hierarchy.

    Default is "true". Turn this flag off to let the caller receive raw exceptions as-is, without any wrapping.