Class HibernateTemplate

java.lang.Object
org.springframework.orm.hibernate5.HibernateTemplate
All Implemented Interfaces:
org.springframework.beans.factory.InitializingBean, HibernateOperations

public class HibernateTemplate extends Object implements HibernateOperations, org.springframework.beans.factory.InitializingBean
Helper class that simplifies Hibernate data access code. Automatically converts HibernateExceptions into DataAccessExceptions, following the org.springframework.dao exception hierarchy.

The central method is execute, supporting Hibernate access 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.

NOTE: Hibernate access code can also be coded against the native Hibernate Session. Hence, for newly started projects, consider adopting the standard Hibernate style of coding against SessionFactory.getCurrentSession(). Alternatively, use execute(HibernateCallback) with Java 8 lambda code blocks against the callback-provided Session which results in elegant code as well, decoupled from the Hibernate Session lifecycle. The remaining operations on this HibernateTemplate are deprecated in the meantime and primarily exist as a migration helper for older Hibernate 3.x/4.x data access code in existing applications.

Since:
4.2
Author:
Juergen Hoeller
See Also:
  • Field Details

    • logger

      protected final org.apache.commons.logging.Log logger
  • Constructor Details

    • HibernateTemplate

      public HibernateTemplate()
      Create a new HibernateTemplate instance.
    • HibernateTemplate

      public HibernateTemplate(SessionFactory sessionFactory)
      Create a new HibernateTemplate instance.
      Parameters:
      sessionFactory - the SessionFactory to create Sessions with
  • Method Details

    • setSessionFactory

      public void setSessionFactory(@Nullable SessionFactory sessionFactory)
      Set the Hibernate SessionFactory that should be used to create Hibernate Sessions.
    • getSessionFactory

      @Nullable public SessionFactory getSessionFactory()
      Return the Hibernate SessionFactory that should be used to create Hibernate Sessions.
    • obtainSessionFactory

      protected final SessionFactory obtainSessionFactory()
      Obtain the SessionFactory for actual use.
      Returns:
      the SessionFactory (never null)
      Throws:
      IllegalStateException - in case of no SessionFactory set
      Since:
      5.0
    • setFilterNames

      public void setFilterNames(@Nullable String... filterNames)
      Set one or more names of Hibernate filters to be activated for all Sessions that this accessor works with.

      Each of those filters will be enabled at the beginning of each operation and correspondingly disabled at the end of the operation. This will work for newly opened Sessions as well as for existing Sessions (for example, within a transaction).

      See Also:
    • getFilterNames

      @Nullable public String[] getFilterNames()
      Return the names of Hibernate filters to be activated, if any.
    • setExposeNativeSession

      public void setExposeNativeSession(boolean exposeNativeSession)
      Set whether to expose the native Hibernate Session to HibernateCallback code.

      Default is "false": a Session proxy will be returned, suppressing close calls and automatically applying query cache settings and transaction timeouts.

      See Also:
    • isExposeNativeSession

      public boolean isExposeNativeSession()
      Return whether to expose the native Hibernate Session to HibernateCallback code, or rather a Session proxy.
    • setCheckWriteOperations

      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 MANUAL.

      See Also:
    • isCheckWriteOperations

      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).
    • setCacheQueries

      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.

      See Also:
    • isCacheQueries

      public boolean isCacheQueries()
      Return whether to cache all queries executed by this template.
    • setQueryCacheRegion

      public void setQueryCacheRegion(@Nullable 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.

      See Also:
    • getQueryCacheRegion

      @Nullable public String getQueryCacheRegion()
      Return the name of the cache region for queries executed by this template.
    • setFetchSize

      public void setFetchSize(int fetchSize)
      Set the fetch size for this HibernateTemplate. This is important for processing large result sets: Setting this higher than the default value will increase processing speed at the cost of memory consumption; setting this lower can avoid transferring row data that will never be read by the application.

      Default is 0, indicating to use the JDBC driver's default.

    • getFetchSize

      public int getFetchSize()
      Return the fetch size specified for this HibernateTemplate.
    • setMaxResults

      public void setMaxResults(int maxResults)
      Set the maximum number of rows for this HibernateTemplate. This is important for processing subsets of large result sets, avoiding to read and hold the entire result set in the database or in the JDBC driver if we're never interested in the entire result in the first place (for example, when performing searches that might return a large number of matches).

      Default is 0, indicating to use the JDBC driver's default.

    • getMaxResults

      public int getMaxResults()
      Return the maximum number of rows specified for this HibernateTemplate.
    • afterPropertiesSet

      public void afterPropertiesSet()
      Specified by:
      afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
    • execute

      @Nullable public <T> T execute(HibernateCallback<T> action) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Execute the action specified by the given action object within a Session.

      Application exceptions thrown by the action object get propagated to the caller (can only be unchecked). Hibernate exceptions are transformed into appropriate DAO ones. Allows for returning a result object, that is a domain object or a collection of domain objects.

      Note: Callback code is not supposed to handle transactions itself! Use an appropriate transaction manager like HibernateTransactionManager. Generally, callback code must not touch any Session lifecycle methods, like close, disconnect, or reconnect, to let the template do its work.

      Specified by:
      execute in interface HibernateOperations
      Parameters:
      action - callback object that specifies the Hibernate action
      Returns:
      a result object returned by the action, or null
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • executeWithNativeSession

      @Nullable public <T> T executeWithNativeSession(HibernateCallback<T> action)
      Execute the action specified by the given action object within a native Session.

      This execute variant overrides the template-wide "exposeNativeSession" setting.

      Parameters:
      action - callback object that specifies the Hibernate action
      Returns:
      a result object returned by the action, or null
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
    • doExecute

      @Nullable protected <T> T doExecute(HibernateCallback<T> action, boolean enforceNativeSession) throws org.springframework.dao.DataAccessException
      Execute the action specified by the given action object within a Session.
      Parameters:
      action - callback object that specifies the Hibernate action
      enforceNativeSession - whether to enforce exposure of the native Hibernate Session to callback code
      Returns:
      a result object returned by the action, or null
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
    • createSessionProxy

      protected Session createSessionProxy(Session session)
      Create a close-suppressing proxy for the given Hibernate Session. The proxy also prepares returned Query and Criteria objects.
      Parameters:
      session - the Hibernate Session to create a proxy for
      Returns:
      the Session proxy
      See Also:
    • enableFilters

      protected void enableFilters(Session session)
      Enable the specified filters on the given Session.
      Parameters:
      session - the current Hibernate Session
      See Also:
    • disableFilters

      protected void disableFilters(Session session)
      Disable the specified filters on the given Session.
      Parameters:
      session - the current Hibernate Session
      See Also:
    • get

      @Nullable public <T> T get(Class<T> entityClass, Serializable id) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Return the persistent instance of the given entity class with the given identifier, or null if not found.

      This method is a thin wrapper around Session.get(Class, Serializable) for convenience. For an explanation of the exact semantics of this method, please do refer to the Hibernate API documentation in the first instance.

      Specified by:
      get in interface HibernateOperations
      Parameters:
      entityClass - a persistent class
      id - the identifier of the persistent instance
      Returns:
      the persistent instance, or null if not found
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • get

      @Nullable public <T> T get(Class<T> entityClass, Serializable id, @Nullable LockMode lockMode) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Return the persistent instance of the given entity class with the given identifier, or null if not found.

      Obtains the specified lock mode if the instance exists.

      This method is a thin wrapper around Session.get(Class, Serializable, LockMode) for convenience. For an explanation of the exact semantics of this method, please do refer to the Hibernate API documentation in the first instance.

      Specified by:
      get in interface HibernateOperations
      Parameters:
      entityClass - a persistent class
      id - the identifier of the persistent instance
      lockMode - the lock mode to obtain
      Returns:
      the persistent instance, or null if not found
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • get

      @Nullable public Object get(String entityName, Serializable id) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Return the persistent instance of the given entity class with the given identifier, or null if not found.

      This method is a thin wrapper around Session.get(String, Serializable) for convenience. For an explanation of the exact semantics of this method, please do refer to the Hibernate API documentation in the first instance.

      Specified by:
      get in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      id - the identifier of the persistent instance
      Returns:
      the persistent instance, or null if not found
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • get

      @Nullable public Object get(String entityName, Serializable id, @Nullable LockMode lockMode) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Return the persistent instance of the given entity class with the given identifier, or null if not found. Obtains the specified lock mode if the instance exists.

      This method is a thin wrapper around Session.get(String, Serializable, LockMode) for convenience. For an explanation of the exact semantics of this method, please do refer to the Hibernate API documentation in the first instance.

      Specified by:
      get in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      id - the identifier of the persistent instance
      lockMode - the lock mode to obtain
      Returns:
      the persistent instance, or null if not found
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • load

      public <T> T load(Class<T> entityClass, Serializable id) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Return the persistent instance of the given entity class with the given identifier, throwing an exception if not found.

      This method is a thin wrapper around Session.load(Class, Serializable) for convenience. For an explanation of the exact semantics of this method, please do refer to the Hibernate API documentation in the first instance.

      Specified by:
      load in interface HibernateOperations
      Parameters:
      entityClass - a persistent class
      id - the identifier of the persistent instance
      Returns:
      the persistent instance
      Throws:
      ObjectRetrievalFailureException - if not found
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • load

      public <T> T load(Class<T> entityClass, Serializable id, @Nullable LockMode lockMode) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Return the persistent instance of the given entity class with the given identifier, throwing an exception if not found. Obtains the specified lock mode if the instance exists.

      This method is a thin wrapper around Session.load(Class, Serializable, LockMode) for convenience. For an explanation of the exact semantics of this method, please do refer to the Hibernate API documentation in the first instance.

      Specified by:
      load in interface HibernateOperations
      Parameters:
      entityClass - a persistent class
      id - the identifier of the persistent instance
      lockMode - the lock mode to obtain
      Returns:
      the persistent instance
      Throws:
      ObjectRetrievalFailureException - if not found
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • load

      public Object load(String entityName, Serializable id) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Return the persistent instance of the given entity class with the given identifier, throwing an exception if not found.

      This method is a thin wrapper around Session.load(String, Serializable) for convenience. For an explanation of the exact semantics of this method, please do refer to the Hibernate API documentation in the first instance.

      Specified by:
      load in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      id - the identifier of the persistent instance
      Returns:
      the persistent instance
      Throws:
      ObjectRetrievalFailureException - if not found
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • load

      public Object load(String entityName, Serializable id, @Nullable LockMode lockMode) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Return the persistent instance of the given entity class with the given identifier, throwing an exception if not found.

      Obtains the specified lock mode if the instance exists.

      This method is a thin wrapper around Session.load(String, Serializable, LockMode) for convenience. For an explanation of the exact semantics of this method, please do refer to the Hibernate API documentation in the first instance.

      Specified by:
      load in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      id - the identifier of the persistent instance
      lockMode - the lock mode to obtain
      Returns:
      the persistent instance
      Throws:
      ObjectRetrievalFailureException - if not found
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • loadAll

      public <T> List<T> loadAll(Class<T> entityClass) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Return all persistent instances of the given entity class. Note: Use queries or criteria for retrieving a specific subset.
      Specified by:
      loadAll in interface HibernateOperations
      Parameters:
      entityClass - a persistent class
      Returns:
      a List containing 0 or more persistent instances
      Throws:
      org.springframework.dao.DataAccessException - if there is a Hibernate error
      See Also:
    • load

      public void load(Object entity, Serializable id) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Load the persistent instance with the given identifier into the given object, throwing an exception if not found.

      This method is a thin wrapper around Session.load(Object, Serializable) for convenience. For an explanation of the exact semantics of this method, please do refer to the Hibernate API documentation in the first instance.

      Specified by:
      load in interface HibernateOperations
      Parameters:
      entity - the object (of the target class) to load into
      id - the identifier of the persistent instance
      Throws:
      ObjectRetrievalFailureException - if not found
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • refresh

      public void refresh(Object entity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Re-read the state of the given persistent instance.
      Specified by:
      refresh in interface HibernateOperations
      Parameters:
      entity - the persistent instance to re-read
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • refresh

      public void refresh(Object entity, @Nullable LockMode lockMode) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Re-read the state of the given persistent instance. Obtains the specified lock mode for the instance.
      Specified by:
      refresh in interface HibernateOperations
      Parameters:
      entity - the persistent instance to re-read
      lockMode - the lock mode to obtain
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • contains

      public boolean contains(Object entity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Check whether the given object is in the Session cache.
      Specified by:
      contains in interface HibernateOperations
      Parameters:
      entity - the persistence instance to check
      Returns:
      whether the given object is in the Session cache
      Throws:
      org.springframework.dao.DataAccessException - if there is a Hibernate error
      See Also:
    • evict

      public void evict(Object entity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Remove the given object from the Session cache.
      Specified by:
      evict in interface HibernateOperations
      Parameters:
      entity - the persistent instance to evict
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • initialize

      public void initialize(Object proxy) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Force initialization of a Hibernate proxy or persistent collection.
      Specified by:
      initialize in interface HibernateOperations
      Parameters:
      proxy - a proxy for a persistent object or a persistent collection
      Throws:
      org.springframework.dao.DataAccessException - if we can't initialize the proxy, for example because it is not associated with an active Session
      See Also:
    • enableFilter

      public Filter enableFilter(String filterName) throws IllegalStateException
      Description copied from interface: HibernateOperations
      Return an enabled Hibernate Filter for the given filter name. The returned Filter instance can be used to set filter parameters.
      Specified by:
      enableFilter in interface HibernateOperations
      Parameters:
      filterName - the name of the filter
      Returns:
      the enabled Hibernate Filter (either already enabled or enabled on the fly by this operation)
      Throws:
      IllegalStateException - if we are not running within a transactional Session (in which case this operation does not make sense)
    • lock

      public void lock(Object entity, LockMode lockMode) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Obtain the specified lock level upon the given object, implicitly checking whether the corresponding database entry still exists.
      Specified by:
      lock in interface HibernateOperations
      Parameters:
      entity - the persistent instance to lock
      lockMode - the lock mode to obtain
      Throws:
      ObjectOptimisticLockingFailureException - if not found
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • lock

      public void lock(String entityName, Object entity, LockMode lockMode) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Obtain the specified lock level upon the given object, implicitly checking whether the corresponding database entry still exists.
      Specified by:
      lock in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      entity - the persistent instance to lock
      lockMode - the lock mode to obtain
      Throws:
      ObjectOptimisticLockingFailureException - if not found
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • save

      public Serializable save(Object entity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Persist the given transient instance.
      Specified by:
      save in interface HibernateOperations
      Parameters:
      entity - the transient instance to persist
      Returns:
      the generated identifier
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • save

      public Serializable save(String entityName, Object entity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Persist the given transient instance.
      Specified by:
      save in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      entity - the transient instance to persist
      Returns:
      the generated identifier
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • update

      public void update(Object entity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Update the given persistent instance, associating it with the current Hibernate Session.
      Specified by:
      update in interface HibernateOperations
      Parameters:
      entity - the persistent instance to update
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • update

      public void update(Object entity, @Nullable LockMode lockMode) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Update the given persistent instance, associating it with the current Hibernate Session.

      Obtains the specified lock mode if the instance exists, implicitly checking whether the corresponding database entry still exists.

      Specified by:
      update in interface HibernateOperations
      Parameters:
      entity - the persistent instance to update
      lockMode - the lock mode to obtain
      Throws:
      ObjectOptimisticLockingFailureException - if not found
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • update

      public void update(String entityName, Object entity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Update the given persistent instance, associating it with the current Hibernate Session.
      Specified by:
      update in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      entity - the persistent instance to update
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • update

      public void update(String entityName, Object entity, @Nullable LockMode lockMode) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Update the given persistent instance, associating it with the current Hibernate Session.

      Obtains the specified lock mode if the instance exists, implicitly checking whether the corresponding database entry still exists.

      Specified by:
      update in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      entity - the persistent instance to update
      lockMode - the lock mode to obtain
      Throws:
      ObjectOptimisticLockingFailureException - if not found
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • saveOrUpdate

      public void saveOrUpdate(Object entity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Save or update the given persistent instance, according to its id (matching the configured "unsaved-value"?). Associates the instance with the current Hibernate Session.
      Specified by:
      saveOrUpdate in interface HibernateOperations
      Parameters:
      entity - the persistent instance to save or update (to be associated with the Hibernate Session)
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • saveOrUpdate

      public void saveOrUpdate(String entityName, Object entity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Save or update the given persistent instance, according to its id (matching the configured "unsaved-value"?). Associates the instance with the current Hibernate Session.
      Specified by:
      saveOrUpdate in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      entity - the persistent instance to save or update (to be associated with the Hibernate Session)
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • replicate

      public void replicate(Object entity, ReplicationMode replicationMode) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Persist the state of the given detached instance according to the given replication mode, reusing the current identifier value.
      Specified by:
      replicate in interface HibernateOperations
      Parameters:
      entity - the persistent object to replicate
      replicationMode - the Hibernate ReplicationMode
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • replicate

      public void replicate(String entityName, Object entity, ReplicationMode replicationMode) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Persist the state of the given detached instance according to the given replication mode, reusing the current identifier value.
      Specified by:
      replicate in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      entity - the persistent object to replicate
      replicationMode - the Hibernate ReplicationMode
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • persist

      public void persist(Object entity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Persist the given transient instance. Follows JSR-220 semantics.

      Similar to save, associating the given object with the current Hibernate Session.

      Specified by:
      persist in interface HibernateOperations
      Parameters:
      entity - the persistent instance to persist
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • persist

      public void persist(String entityName, Object entity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Persist the given transient instance. Follows JSR-220 semantics.

      Similar to save, associating the given object with the current Hibernate Session.

      Specified by:
      persist in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      entity - the persistent instance to persist
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • merge

      public <T> T merge(T entity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Copy the state of the given object onto the persistent object with the same identifier. Follows JSR-220 semantics.

      Similar to saveOrUpdate, but never associates the given object with the current Hibernate Session. In case of a new entity, the state will be copied over as well.

      Note that merge will not update the identifiers in the passed-in object graph (in contrast to TopLink)! Consider registering Spring's IdTransferringMergeEventListener if you would like to have newly assigned ids transferred to the original object graph too.

      Specified by:
      merge in interface HibernateOperations
      Parameters:
      entity - the object to merge with the corresponding persistence instance
      Returns:
      the updated, registered persistent instance
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • merge

      public <T> T merge(String entityName, T entity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Copy the state of the given object onto the persistent object with the same identifier. Follows JSR-220 semantics.

      Similar to saveOrUpdate, but never associates the given object with the current Hibernate Session. In the case of a new entity, the state will be copied over as well.

      Note that merge will not update the identifiers in the passed-in object graph (in contrast to TopLink)! Consider registering Spring's IdTransferringMergeEventListener if you would like to have newly assigned ids transferred to the original object graph too.

      Specified by:
      merge in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      entity - the object to merge with the corresponding persistence instance
      Returns:
      the updated, registered persistent instance
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • delete

      public void delete(Object entity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Delete the given persistent instance.
      Specified by:
      delete in interface HibernateOperations
      Parameters:
      entity - the persistent instance to delete
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • delete

      public void delete(Object entity, @Nullable LockMode lockMode) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Delete the given persistent instance.

      Obtains the specified lock mode if the instance exists, implicitly checking whether the corresponding database entry still exists.

      Specified by:
      delete in interface HibernateOperations
      Parameters:
      entity - the persistent instance to delete
      lockMode - the lock mode to obtain
      Throws:
      ObjectOptimisticLockingFailureException - if not found
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • delete

      public void delete(String entityName, Object entity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Delete the given persistent instance.
      Specified by:
      delete in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      entity - the persistent instance to delete
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • delete

      public void delete(String entityName, Object entity, @Nullable LockMode lockMode) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Delete the given persistent instance.

      Obtains the specified lock mode if the instance exists, implicitly checking whether the corresponding database entry still exists.

      Specified by:
      delete in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      entity - the persistent instance to delete
      lockMode - the lock mode to obtain
      Throws:
      ObjectOptimisticLockingFailureException - if not found
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • deleteAll

      public void deleteAll(Collection<?> entities) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Delete all given persistent instances.

      This can be combined with any of the find methods to delete by query in two lines of code.

      Specified by:
      deleteAll in interface HibernateOperations
      Parameters:
      entities - the persistent instances to delete
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • flush

      public void flush() throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Flush all pending saves, updates and deletes to the database.

      Only invoke this for selective eager flushing, for example when JDBC code needs to see certain changes within the same transaction. Else, it is preferable to rely on auto-flushing at transaction completion.

      Specified by:
      flush in interface HibernateOperations
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • clear

      public void clear() throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Remove all objects from the Session cache, and cancel all pending saves, updates and deletes.
      Specified by:
      clear in interface HibernateOperations
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • findByCriteria

      public List<?> findByCriteria(DetachedCriteria criteria) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Execute a query based on a given Hibernate criteria object.
      Specified by:
      findByCriteria in interface HibernateOperations
      Parameters:
      criteria - the detached Hibernate criteria object. Note: Do not reuse criteria objects! They need to recreated per execution, due to the suboptimal design of Hibernate's criteria facility.
      Returns:
      a List containing 0 or more persistent instances
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • findByCriteria

      public List<?> findByCriteria(DetachedCriteria criteria, int firstResult, int maxResults) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Execute a query based on the given Hibernate criteria object.
      Specified by:
      findByCriteria in interface HibernateOperations
      Parameters:
      criteria - the detached Hibernate criteria object. Note: Do not reuse criteria objects! They need to recreated per execution, due to the suboptimal design of Hibernate's criteria facility.
      firstResult - the index of the first result object to be retrieved (numbered from 0)
      maxResults - the maximum number of result objects to retrieve (or <=0 for no limit)
      Returns:
      a List containing 0 or more persistent instances
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • findByExample

      public <T> List<T> findByExample(T exampleEntity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Execute a query based on the given example entity object.
      Specified by:
      findByExample in interface HibernateOperations
      Parameters:
      exampleEntity - an instance of the desired entity, serving as example for "query-by-example"
      Returns:
      a List containing 0 or more persistent instances
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • findByExample

      public <T> List<T> findByExample(String entityName, T exampleEntity) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Execute a query based on the given example entity object.
      Specified by:
      findByExample in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      exampleEntity - an instance of the desired entity, serving as example for "query-by-example"
      Returns:
      a List containing 0 or more persistent instances
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • findByExample

      public <T> List<T> findByExample(T exampleEntity, int firstResult, int maxResults) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Execute a query based on a given example entity object.
      Specified by:
      findByExample in interface HibernateOperations
      Parameters:
      exampleEntity - an instance of the desired entity, serving as example for "query-by-example"
      firstResult - the index of the first result object to be retrieved (numbered from 0)
      maxResults - the maximum number of result objects to retrieve (or <=0 for no limit)
      Returns:
      a List containing 0 or more persistent instances
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • findByExample

      public <T> List<T> findByExample(@Nullable String entityName, T exampleEntity, int firstResult, int maxResults) throws org.springframework.dao.DataAccessException
      Description copied from interface: HibernateOperations
      Execute a query based on a given example entity object.
      Specified by:
      findByExample in interface HibernateOperations
      Parameters:
      entityName - the name of the persistent entity
      exampleEntity - an instance of the desired entity, serving as example for "query-by-example"
      firstResult - the index of the first result object to be retrieved (numbered from 0)
      maxResults - the maximum number of result objects to retrieve (or <=0 for no limit)
      Returns:
      a List containing 0 or more persistent instances
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • find

      @Deprecated public List<?> find(String queryString, @Nullable Object... values) throws org.springframework.dao.DataAccessException
      Deprecated.
      Description copied from interface: HibernateOperations
      Execute an HQL query, binding a number of values to "?" parameters in the query string.
      Specified by:
      find in interface HibernateOperations
      Parameters:
      queryString - a query expressed in Hibernate's query language
      values - the values of the parameters
      Returns:
      a List containing the results of the query execution
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • findByNamedParam

      @Deprecated public List<?> findByNamedParam(String queryString, String paramName, Object value) throws org.springframework.dao.DataAccessException
      Deprecated.
      Description copied from interface: HibernateOperations
      Execute an HQL query, binding one value to a ":" named parameter in the query string.
      Specified by:
      findByNamedParam in interface HibernateOperations
      Parameters:
      queryString - a query expressed in Hibernate's query language
      paramName - the name of the parameter
      value - the value of the parameter
      Returns:
      a List containing the results of the query execution
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • findByNamedParam

      @Deprecated public List<?> findByNamedParam(String queryString, String[] paramNames, Object[] values) throws org.springframework.dao.DataAccessException
      Deprecated.
      Description copied from interface: HibernateOperations
      Execute an HQL query, binding a number of values to ":" named parameters in the query string.
      Specified by:
      findByNamedParam in interface HibernateOperations
      Parameters:
      queryString - a query expressed in Hibernate's query language
      paramNames - the names of the parameters
      values - the values of the parameters
      Returns:
      a List containing the results of the query execution
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • findByValueBean

      @Deprecated public List<?> findByValueBean(String queryString, Object valueBean) throws org.springframework.dao.DataAccessException
      Deprecated.
      Description copied from interface: HibernateOperations
      Execute an HQL query, binding the properties of the given bean to named parameters in the query string.
      Specified by:
      findByValueBean in interface HibernateOperations
      Parameters:
      queryString - a query expressed in Hibernate's query language
      valueBean - the values of the parameters
      Returns:
      a List containing the results of the query execution
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • findByNamedQuery

      @Deprecated public List<?> findByNamedQuery(String queryName, @Nullable Object... values) throws org.springframework.dao.DataAccessException
      Deprecated.
      Description copied from interface: HibernateOperations
      Execute a named query binding a number of values to "?" parameters in the query string.

      A named query is defined in a Hibernate mapping file.

      Specified by:
      findByNamedQuery in interface HibernateOperations
      Parameters:
      queryName - the name of a Hibernate query in a mapping file
      values - the values of the parameters
      Returns:
      a List containing the results of the query execution
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • findByNamedQueryAndNamedParam

      @Deprecated public List<?> findByNamedQueryAndNamedParam(String queryName, String paramName, Object value) throws org.springframework.dao.DataAccessException
      Deprecated.
      Description copied from interface: HibernateOperations
      Execute a named query, binding one value to a ":" named parameter in the query string.

      A named query is defined in a Hibernate mapping file.

      Specified by:
      findByNamedQueryAndNamedParam in interface HibernateOperations
      Parameters:
      queryName - the name of a Hibernate query in a mapping file
      paramName - the name of parameter
      value - the value of the parameter
      Returns:
      a List containing the results of the query execution
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • findByNamedQueryAndNamedParam

      @Deprecated public List<?> findByNamedQueryAndNamedParam(String queryName, @Nullable String[] paramNames, @Nullable Object[] values) throws org.springframework.dao.DataAccessException
      Deprecated.
      Description copied from interface: HibernateOperations
      Execute a named query, binding a number of values to ":" named parameters in the query string.

      A named query is defined in a Hibernate mapping file.

      Specified by:
      findByNamedQueryAndNamedParam in interface HibernateOperations
      Parameters:
      queryName - the name of a Hibernate query in a mapping file
      paramNames - the names of the parameters
      values - the values of the parameters
      Returns:
      a List containing the results of the query execution
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • findByNamedQueryAndValueBean

      @Deprecated public List<?> findByNamedQueryAndValueBean(String queryName, Object valueBean) throws org.springframework.dao.DataAccessException
      Deprecated.
      Description copied from interface: HibernateOperations
      Execute a named query, binding the properties of the given bean to ":" named parameters in the query string.

      A named query is defined in a Hibernate mapping file.

      Specified by:
      findByNamedQueryAndValueBean in interface HibernateOperations
      Parameters:
      queryName - the name of a Hibernate query in a mapping file
      valueBean - the values of the parameters
      Returns:
      a List containing the results of the query execution
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • iterate

      @Deprecated public Iterator<?> iterate(String queryString, @Nullable Object... values) throws org.springframework.dao.DataAccessException
      Deprecated.
      Description copied from interface: HibernateOperations
      Execute a query for persistent instances, binding a number of values to "?" parameters in the query string.

      Returns the results as an Iterator. Entities returned are initialized on demand. See the Hibernate API documentation for details.

      Specified by:
      iterate in interface HibernateOperations
      Parameters:
      queryString - a query expressed in Hibernate's query language
      values - the values of the parameters
      Returns:
      an Iterator containing 0 or more persistent instances
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • closeIterator

      @Deprecated public void closeIterator(Iterator<?> it) throws org.springframework.dao.DataAccessException
      Deprecated.
      Description copied from interface: HibernateOperations
      Immediately close an Iterator created by any of the various iterate(..) operations, instead of waiting until the session is closed or disconnected.
      Specified by:
      closeIterator in interface HibernateOperations
      Parameters:
      it - the Iterator to close
      Throws:
      org.springframework.dao.DataAccessException - if the Iterator could not be closed
      See Also:
    • bulkUpdate

      @Deprecated public int bulkUpdate(String queryString, @Nullable Object... values) throws org.springframework.dao.DataAccessException
      Deprecated.
      Description copied from interface: HibernateOperations
      Update/delete all objects according to the given query, binding a number of values to "?" parameters in the query string.
      Specified by:
      bulkUpdate in interface HibernateOperations
      Parameters:
      queryString - an update/delete query expressed in Hibernate's query language
      values - the values of the parameters
      Returns:
      the number of instances updated/deleted
      Throws:
      org.springframework.dao.DataAccessException - in case of Hibernate errors
      See Also:
    • checkWriteOperationAllowed

      protected void checkWriteOperationAllowed(Session session) throws org.springframework.dao.InvalidDataAccessApiUsageException
      Check whether write operations are allowed on the given Session.

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

      Parameters:
      session - current Hibernate Session
      Throws:
      org.springframework.dao.InvalidDataAccessApiUsageException - if write operations are not allowed
      See Also:
    • prepareCriteria

      protected void prepareCriteria(Criteria criteria)
      Prepare the given Criteria object, applying cache settings and/or a transaction timeout.
      Parameters:
      criteria - the Criteria object to prepare
      See Also:
    • prepareQuery

      protected void prepareQuery(Query<?> queryObject)
      Prepare the given Query object, applying cache settings and/or a transaction timeout.
      Parameters:
      queryObject - the Query object to prepare
      See Also:
    • applyNamedParameterToQuery

      protected void applyNamedParameterToQuery(Query<?> queryObject, String paramName, Object value) throws HibernateException
      Apply the given name parameter to the given Query object.
      Parameters:
      queryObject - the Query object
      paramName - the name of the parameter
      value - the value of the parameter
      Throws:
      HibernateException - if thrown by the Query object