Save This Page
Home » spring-framework-2.5.4 » org.springframework » orm » hibernate » [javadoc | source]
org.springframework.orm.hibernate
public class: HibernateTemplate [javadoc | source]
java.lang.Object
   org.springframework.orm.hibernate.HibernateAccessor
      org.springframework.orm.hibernate.HibernateTemplate

All Implemented Interfaces:
    HibernateOperations, InitializingBean

Helper class that simplifies Hibernate data access code, and converts checked HibernateExceptions into unchecked DataAccessExceptions, following the org.springframework.dao exception hierarchy. Uses the same SQLExceptionTranslator mechanism as JdbcTemplate.

Typically used to implement data access or business logic services that use Hibernate within their implementation but are Hibernate-agnostic in their interface. The latter or code calling the latter only have to deal with domain objects, query objects, and org.springframework.dao exceptions.

The central method is "execute", supporting Hibernate code implementing the HibernateCallback interface. It provides Hibernate Session handling such that neither the HibernateCallback implementation nor the calling code needs to explicitly care about retrieving/closing Hibernate Sessions, or handling Session lifecycle exceptions. For typical single step actions, there are various convenience methods (find, load, saveOrUpdate, delete).

Can be used within a service implementation via direct instantiation with a SessionFactory reference, or get prepared in an application context and given to services as bean reference. Note: The SessionFactory should always be configured as bean in the application context, in the first case given to the service directly, in the second case to the prepared template.

This class can be considered a programmatic alternative to HibernateInterceptor. The major advantage is its straightforwardness, the major disadvantage that no checked application exceptions can get thrown from within data access code. Such checks and the actual throwing of such exceptions can often be deferred to after callback execution, though.

Note that even if HibernateTransactionManager is used for transaction demarcation in higher-level services, all those services above the data access layer don't need need to be Hibernate-aware. Setting such a special PlatformTransactionManager is a configuration issue: For example, switching to JTA is just a matter of Spring configuration (use JtaTransactionManager instead) that does not affect application code.

LocalSessionFactoryBean is the preferred way of obtaining a reference to a specific Hibernate SessionFactory, at least in a non-EJB environment. Alternatively, use a JndiObjectFactoryBean to fetch a SessionFactory from JNDI (possibly set up via a JCA Connector).

Note that operations that return an Iterator (i.e. iterate) are supposed to be used within Spring-driven or JTA-driven transactions (with HibernateTransactionManager, JtaTransactionManager, or EJB CMT). Else, the Iterator won't be able to read results from its ResultSet anymore, as the underlying Hibernate Session will already have been closed.

Lazy loading will also just work with an open Hibernate Session, either within a transaction or within OpenSessionInViewFilter/Interceptor. Furthermore, some operations just make sense within transactions, for example: contains, evict, lock, flush, clear.

Note: Spring's Hibernate support requires Hibernate 2.1 (as of Spring 1.0).

Fields inherited from org.springframework.orm.hibernate.HibernateAccessor:
FLUSH_NEVER,  FLUSH_AUTO,  FLUSH_EAGER,  logger
Constructor:
 public HibernateTemplate() 
 public HibernateTemplate(SessionFactory sessionFactory) 
    Create a new HibernateTemplate instance.
    Parameters:
    sessionFactory - SessionFactory to create Sessions
 public HibernateTemplate(SessionFactory sessionFactory,
    boolean allowCreate) 
    Create a new HibernateTemplate instance.
    Parameters:
    sessionFactory - SessionFactory to create Sessions
    allowCreate - if a new Session should be created if no thread-bound found
Method from org.springframework.orm.hibernate.HibernateTemplate Summary:
applyNamedParameterToQuery,   checkWriteOperationAllowed,   clear,   closeIterator,   contains,   createSessionProxy,   delete,   delete,   delete,   delete,   delete,   deleteAll,   evict,   execute,   execute,   executeFind,   find,   find,   find,   find,   find,   findByNamedParam,   findByNamedParam,   findByNamedParam,   findByNamedParam,   findByNamedQuery,   findByNamedQuery,   findByNamedQuery,   findByNamedQuery,   findByNamedQuery,   findByNamedQueryAndNamedParam,   findByNamedQueryAndNamedParam,   findByNamedQueryAndNamedParam,   findByNamedQueryAndNamedParam,   findByNamedQueryAndValueBean,   findByValueBean,   flush,   get,   get,   getQueryCacheRegion,   getSession,   initialize,   isAllowCreate,   isAlwaysUseNewSession,   isCacheQueries,   isCheckWriteOperations,   isExposeNativeSession,   iterate,   iterate,   iterate,   iterate,   iterate,   load,   load,   load,   loadAll,   lock,   prepareCriteria,   prepareQuery,   refresh,   refresh,   save,   save,   saveOrUpdate,   saveOrUpdateAll,   saveOrUpdateCopy,   setAllowCreate,   setAlwaysUseNewSession,   setCacheQueries,   setCheckWriteOperations,   setExposeNativeSession,   setQueryCacheRegion,   update,   update
Methods from org.springframework.orm.hibernate.HibernateAccessor:
afterPropertiesSet,   convertHibernateAccessException,   convertJdbcAccessException,   flushIfNecessary,   getEntityInterceptor,   getFlushMode,   getJdbcExceptionTranslator,   getSessionFactory,   setEntityInterceptor,   setFlushMode,   setFlushModeName,   setJdbcExceptionTranslator,   setSessionFactory
Methods from java.lang.Object:
equals,   getClass,   hashCode,   notify,   notifyAll,   toString,   wait,   wait,   wait
Method from org.springframework.orm.hibernate.HibernateTemplate Detail:
 protected  void applyNamedParameterToQuery(Query queryObject,
    String paramName,
    Object value,
    Type type) throws HibernateException 
    Apply the given name parameter to the given Query object.
 protected  void checkWriteOperationAllowed(Session session) throws InvalidDataAccessApiUsageException 
    Check whether write operations are allowed on the given Session.

    Default implementation throws an InvalidDataAccessApiUsageException in case of FlushMode.NEVER. Can be overridden in subclasses.

 public  void clear() throws DataAccessException 
 public  void closeIterator(Iterator it) throws DataAccessException 
 public boolean contains(Object entity) throws DataAccessException 
 protected Session createSessionProxy(Session session) 
    Create a close-suppressing proxy for the given Hibernate Session. The proxy also prepares returned Query and Criteria objects.
 public  void delete(Object entity) throws DataAccessException 
 public int delete(String queryString) throws DataAccessException 
 public  void delete(Object entity,
    LockMode lockMode) throws DataAccessException 
 public int delete(String queryString,
    Object value,
    Type type) throws DataAccessException 
 public int delete(String queryString,
    Object[] values,
    Type[] types) throws DataAccessException 
 public  void deleteAll(Collection entities) throws DataAccessException 
 public  void evict(Object entity) throws DataAccessException 
 public Object execute(HibernateCallback action) throws DataAccessException 
 public Object execute(HibernateCallback action,
    boolean exposeNativeSession) throws DataAccessException 
    Execute the action specified by the given action object within a Session.
 public List executeFind(HibernateCallback action) throws DataAccessException 
 public List find(String queryString) throws DataAccessException 
 public List find(String queryString,
    Object value) throws DataAccessException 
 public List find(String queryString,
    Object[] values) throws DataAccessException 
 public List find(String queryString,
    Object value,
    Type type) throws DataAccessException 
 public List find(String queryString,
    Object[] values,
    Type[] types) throws DataAccessException 
 public List findByNamedParam(String queryString,
    String paramName,
    Object value) throws DataAccessException 
 public List findByNamedParam(String queryString,
    String[] paramNames,
    Object[] values) throws DataAccessException 
 public List findByNamedParam(String queryString,
    String paramName,
    Object value,
    Type type) throws DataAccessException 
 public List findByNamedParam(String queryString,
    String[] paramNames,
    Object[] values,
    Type[] types) throws DataAccessException 
 public List findByNamedQuery(String queryName) throws DataAccessException 
 public List findByNamedQuery(String queryName,
    Object value) throws DataAccessException 
 public List findByNamedQuery(String queryName,
    Object[] values) throws DataAccessException 
 public List findByNamedQuery(String queryName,
    Object value,
    Type type) throws DataAccessException 
 public List findByNamedQuery(String queryName,
    Object[] values,
    Type[] types) throws DataAccessException 
 public List findByNamedQueryAndNamedParam(String queryName,
    String paramName,
    Object value) throws DataAccessException 
 public List findByNamedQueryAndNamedParam(String queryName,
    String[] paramNames,
    Object[] values) throws DataAccessException 
 public List findByNamedQueryAndNamedParam(String queryName,
    String paramName,
    Object value,
    Type type) throws DataAccessException 
 public List findByNamedQueryAndNamedParam(String queryName,
    String[] paramNames,
    Object[] values,
    Type[] types) throws DataAccessException 
 public List findByNamedQueryAndValueBean(String queryName,
    Object valueBean) throws DataAccessException 
 public List findByValueBean(String queryString,
    Object valueBean) throws DataAccessException 
 public  void flush() throws DataAccessException 
 public Object get(Class entityClass,
    Serializable id) throws DataAccessException 
 public Object get(Class entityClass,
    Serializable id,
    LockMode lockMode) throws DataAccessException 
 public String getQueryCacheRegion() 
    Return the name of the cache region for queries executed by this template.
 protected Session getSession() 
    Return a Session for use by this template.

    Returns a new Session in case of "alwaysUseNewSession" (using the same JDBC Connection as a transactional Session, if applicable), a pre-bound Session in case of "allowCreate" turned off, and a pre-bound or new Session else (new only if no transactional or otherwise pre-bound Session exists).

 public  void initialize(Object proxy) throws DataAccessException 
 public boolean isAllowCreate() 
    Return if a new Session should be created if no thread-bound found.
 public boolean isAlwaysUseNewSession() 
    Return whether to always use a new Hibernate Session for this template.
 public boolean isCacheQueries() 
    Return whether to cache all queries executed by this template.
 public boolean isCheckWriteOperations() 
    Return whether to check that the Hibernate Session is not in read-only mode in case of write operations (save/update/delete).
 public boolean isExposeNativeSession() 
    Return whether to expose the native Hibernate Session to HibernateCallback code, or rather a Session proxy.
 public Iterator iterate(String queryString) throws DataAccessException 
 public Iterator iterate(String queryString,
    Object value) throws DataAccessException 
 public Iterator iterate(String queryString,
    Object[] values) throws DataAccessException 
 public Iterator iterate(String queryString,
    Object value,
    Type type) throws DataAccessException 
 public Iterator iterate(String queryString,
    Object[] values,
    Type[] types) throws DataAccessException 
 public Object load(Class entityClass,
    Serializable id) throws DataAccessException 
 public  void load(Object entity,
    Serializable id) throws DataAccessException 
 public Object load(Class entityClass,
    Serializable id,
    LockMode lockMode) throws DataAccessException 
 public List loadAll(Class entityClass) throws DataAccessException 
 public  void lock(Object entity,
    LockMode lockMode) throws DataAccessException 
 protected  void prepareCriteria(Criteria criteria) 
    Prepare the given Criteria object, applying cache settings and/or a transaction timeout.
 protected  void prepareQuery(Query queryObject) 
    Prepare the given Query object, applying cache settings and/or a transaction timeout.
 public  void refresh(Object entity) throws DataAccessException 
 public  void refresh(Object entity,
    LockMode lockMode) throws DataAccessException 
 public Serializable save(Object entity) throws DataAccessException 
 public  void save(Object entity,
    Serializable id) throws DataAccessException 
 public  void saveOrUpdate(Object entity) throws DataAccessException 
 public  void saveOrUpdateAll(Collection entities) throws DataAccessException 
 public Object saveOrUpdateCopy(Object entity) throws DataAccessException 
 public  void setAllowCreate(boolean allowCreate) 
    Set if a new Session should be created if no thread-bound found.

    HibernateTemplate is aware of a respective Session bound to the current thread, for example when using HibernateTransactionManager. If allowCreate is true, a new Session will be created if none found. If false, an IllegalStateException will get thrown in this case.

 public  void setAlwaysUseNewSession(boolean alwaysUseNewSession) 
    Set whether to always use a new Hibernate Session for this template. Default is false; if activated, all operations on this template will work on a new Hibernate Session even in case of a pre-bound Session (for example, within a transaction or OpenSessionInViewFilter).

    Within a transaction, a new Hibernate Session used by this template will participate in the transaction through using the same JDBC Connection. In such a scenario, multiple Sessions will participate in the same database transaction.

    Turn this on for operations that are supposed to always execute independently, without side effects caused by a shared Hibernate Session.

 public  void setCacheQueries(boolean cacheQueries) 
    Set whether to cache all queries executed by this template. If this is true, all Query and Criteria objects created by this template will be marked as cacheable (including all queries through find methods).

    To specify the query region to be used for queries cached by this template, set the "queryCacheRegion" property.

 public  void setCheckWriteOperations(boolean checkWriteOperations) 
    Set whether to check that the Hibernate Session is not in read-only mode in case of write operations (save/update/delete).

    Default is true, for fail-fast behavior when attempting write operations within a read-only transaction. Turn this off to allow save/update/delete on a Session with flush mode NEVER.

 public  void setExposeNativeSession(boolean exposeNativeSession) 
    Set whether to expose the native Hibernate Session to HibernateCallback code. Default is false; instead, a Session proxy will be returned, suppressing close calls and automatically applying query cache settings and transaction timeouts.
 public  void setQueryCacheRegion(String queryCacheRegion) 
    Set the name of the cache region for queries executed by this template. If this is specified, it will be applied to all Query and Criteria objects created by this template (including all queries through find methods).

    The cache region will not take effect unless queries created by this template are configured to be cached via the "cacheQueries" property.

 public  void update(Object entity) throws DataAccessException 
 public  void update(Object entity,
    LockMode lockMode) throws DataAccessException