public class HibernateTemplate extends HibernateAccessor implements HibernateOperations
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: As of Hibernate 3.0.1, transactional Hibernate access code can
also be coded in plain Hibernate style. Hence, for newly started projects,
consider adopting the standard Hibernate3 style of coding data access objects
instead, based on SessionFactory.getCurrentSession()
.
This class can be considered as direct alternative to working with the raw
Hibernate3 Session API (through SessionFactory.getCurrentSession()
).
The major advantage is its automatic conversion to DataAccessExceptions as well
as its capability to fall back to 'auto-commit' style behavior when used outside
of transactions. Note that HibernateTemplate will perform its own Session
management, not participating in a custom Hibernate CurrentSessionContext
unless you explicitly switch "allowCreate"
to "false".
LocalSessionFactoryBean
is the preferred way of obtaining a reference
to a specific Hibernate SessionFactory, at least in a non-EJB environment.
The Spring application context will manage its lifecycle, initializing and
shutting down the factory as part of the application.
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
.
HibernateAccessor.setSessionFactory(org.hibernate.SessionFactory)
,
HibernateCallback
,
Session
,
LocalSessionFactoryBean
,
HibernateTransactionManager
,
JtaTransactionManager
,
OpenSessionInViewFilter
,
OpenSessionInViewInterceptor
FLUSH_ALWAYS, FLUSH_AUTO, FLUSH_COMMIT, FLUSH_EAGER, FLUSH_NEVER, logger
Constructor and Description |
---|
HibernateTemplate()
Create a new HibernateTemplate instance.
|
HibernateTemplate(SessionFactory sessionFactory)
Create a new HibernateTemplate instance.
|
HibernateTemplate(SessionFactory sessionFactory,
boolean allowCreate)
Create a new HibernateTemplate instance.
|
Modifier and Type | Method and Description |
---|---|
protected void |
applyNamedParameterToQuery(Query queryObject,
String paramName,
Object value)
Apply the given name parameter to the given Query object.
|
int |
bulkUpdate(String queryString)
Update/delete all objects according to the given query.
|
int |
bulkUpdate(String queryString,
Object... values)
Update/delete all objects according to the given query, binding a number of
values to "?" parameters in the query string.
|
int |
bulkUpdate(String queryString,
Object value)
Update/delete all objects according to the given query, binding one value
to a "?" parameter in the query string.
|
protected void |
checkWriteOperationAllowed(Session session)
Check whether write operations are allowed on the given Session.
|
void |
clear()
Remove all objects from the
Session cache, and
cancel all pending saves, updates and deletes. |
void |
closeIterator(Iterator it)
Immediately close an
Iterator created by any of the various
iterate(..) operations, instead of waiting until the
session is closed or disconnected. |
boolean |
contains(Object entity)
Check whether the given object is in the Session cache.
|
protected Session |
createSessionProxy(Session session)
Create a close-suppressing proxy for the given Hibernate Session.
|
void |
delete(Object entity)
Delete the given persistent instance.
|
void |
delete(Object entity,
LockMode lockMode)
Delete the given persistent instance.
|
void |
delete(String entityName,
Object entity)
Delete the given persistent instance.
|
void |
delete(String entityName,
Object entity,
LockMode lockMode)
Delete the given persistent instance.
|
void |
deleteAll(Collection entities)
Delete all given persistent instances.
|
protected <T> T |
doExecute(HibernateCallback<T> action,
boolean enforceNewSession,
boolean enforceNativeSession)
Execute the action specified by the given action object within a Session.
|
Filter |
enableFilter(String filterName)
Return an enabled Hibernate
Filter for the given filter name. |
void |
evict(Object entity)
Remove the given object from the
Session cache. |
<T> T |
execute(HibernateCallback<T> action)
Execute the action specified by the given action object within a
Session . |
List |
executeFind(HibernateCallback<?> action)
Execute the specified action assuming that the result object is a
List . |
<T> T |
executeWithNativeSession(HibernateCallback<T> action)
Execute the action specified by the given action object within a
native
Session . |
<T> T |
executeWithNewSession(HibernateCallback<T> action)
Execute the action specified by the given action object within a
new
Session . |
List |
find(String queryString)
Execute an HQL query.
|
List |
find(String queryString,
Object... values)
Execute an HQL query, binding a number of values to "?" parameters
in the query string.
|
List |
find(String queryString,
Object value)
Execute an HQL query, binding one value to a "?" parameter in the
query string.
|
List |
findByCriteria(DetachedCriteria criteria)
Execute a query based on a given Hibernate criteria object.
|
List |
findByCriteria(DetachedCriteria criteria,
int firstResult,
int maxResults)
Execute a query based on the given Hibernate criteria object.
|
List |
findByExample(Object exampleEntity)
Execute a query based on the given example entity object.
|
List |
findByExample(Object exampleEntity,
int firstResult,
int maxResults)
Execute a query based on a given example entity object.
|
List |
findByExample(String entityName,
Object exampleEntity)
Execute a query based on the given example entity object.
|
List |
findByExample(String entityName,
Object exampleEntity,
int firstResult,
int maxResults)
Execute a query based on a given example entity object.
|
List |
findByNamedParam(String queryString,
String[] paramNames,
Object[] values)
Execute an HQL query, binding a number of values to ":" named
parameters in the query string.
|
List |
findByNamedParam(String queryString,
String paramName,
Object value)
Execute an HQL query, binding one value to a ":" named parameter
in the query string.
|
List |
findByNamedQuery(String queryName)
Execute a named query.
|
List |
findByNamedQuery(String queryName,
Object... values)
Execute a named query binding a number of values to "?" parameters
in the query string.
|
List |
findByNamedQuery(String queryName,
Object value)
Execute a named query, binding one value to a "?" parameter in
the query string.
|
List |
findByNamedQueryAndNamedParam(String queryName,
String[] paramNames,
Object[] values)
Execute a named query, binding a number of values to ":" named
parameters in the query string.
|
List |
findByNamedQueryAndNamedParam(String queryName,
String paramName,
Object value)
Execute a named query, binding one value to a ":" named parameter
in the query string.
|
List |
findByNamedQueryAndValueBean(String queryName,
Object valueBean)
Execute a named query, binding the properties of the given bean to
":" named parameters in the query string.
|
List |
findByValueBean(String queryString,
Object valueBean)
Execute an HQL query, binding the properties of the given bean to
named parameters in the query string.
|
void |
flush()
Flush all pending saves, updates and deletes to the database.
|
<T> T |
get(Class<T> entityClass,
Serializable id)
Return the persistent instance of the given entity class
with the given identifier, or
null if not found. |
<T> T |
get(Class<T> entityClass,
Serializable id,
LockMode lockMode)
Return the persistent instance of the given entity class
with the given identifier, or
null if not found. |
Object |
get(String entityName,
Serializable id)
Return the persistent instance of the given entity class
with the given identifier, or
null if not found. |
Object |
get(String entityName,
Serializable id,
LockMode lockMode)
Return the persistent instance of the given entity class
with the given identifier, or
null if not found. |
int |
getFetchSize()
Return the fetch size specified for this HibernateTemplate.
|
int |
getMaxResults()
Return the maximum number of rows specified for this HibernateTemplate.
|
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.
|
void |
initialize(Object proxy)
Force initialization of a Hibernate proxy or persistent collection.
|
boolean |
isAllowCreate()
Return if a new Session should be created if no thread-bound found.
|
boolean |
isAlwaysUseNewSession()
Return whether to always use a new Hibernate Session for this template.
|
boolean |
isCacheQueries()
Return whether to cache all queries executed by this template.
|
boolean |
isCheckWriteOperations()
Return whether to check that the Hibernate Session is not in read-only
mode in case of write operations (save/update/delete).
|
boolean |
isExposeNativeSession()
Return whether to expose the native Hibernate Session to
HibernateCallback code, or rather a Session proxy.
|
Iterator |
iterate(String queryString)
Execute a query for persistent instances.
|
Iterator |
iterate(String queryString,
Object... values)
Execute a query for persistent instances, binding a number of
values to "?" parameters in the query string.
|
Iterator |
iterate(String queryString,
Object value)
Execute a query for persistent instances, binding one value
to a "?" parameter in the query string.
|
<T> T |
load(Class<T> entityClass,
Serializable id)
Return the persistent instance of the given entity class
with the given identifier, throwing an exception if not found.
|
<T> T |
load(Class<T> entityClass,
Serializable id,
LockMode lockMode)
Return the persistent instance of the given entity class
with the given identifier, throwing an exception if not found.
|
void |
load(Object entity,
Serializable id)
Load the persistent instance with the given identifier
into the given object, throwing an exception if not found.
|
Object |
load(String entityName,
Serializable id)
Return the persistent instance of the given entity class
with the given identifier, throwing an exception if not found.
|
Object |
load(String entityName,
Serializable id,
LockMode lockMode)
Return the persistent instance of the given entity class
with the given identifier, throwing an exception if not found.
|
<T> List<T> |
loadAll(Class<T> entityClass)
Return all persistent instances of the given entity class.
|
void |
lock(Object entity,
LockMode lockMode)
Obtain the specified lock level upon the given object, implicitly
checking whether the corresponding database entry still exists.
|
void |
lock(String entityName,
Object entity,
LockMode lockMode)
Obtain the specified lock level upon the given object, implicitly
checking whether the corresponding database entry still exists.
|
<T> T |
merge(String entityName,
T entity)
Copy the state of the given object onto the persistent object
with the same identifier.
|
<T> T |
merge(T entity)
Copy the state of the given object onto the persistent object
with the same identifier.
|
void |
persist(Object entity)
Persist the given transient instance.
|
void |
persist(String entityName,
Object entity)
Persist the given transient instance.
|
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.
|
void |
refresh(Object entity)
Re-read the state of the given persistent instance.
|
void |
refresh(Object entity,
LockMode lockMode)
Re-read the state of the given persistent instance.
|
void |
replicate(Object entity,
ReplicationMode replicationMode)
Persist the state of the given detached instance according to the
given replication mode, reusing the current identifier value.
|
void |
replicate(String entityName,
Object entity,
ReplicationMode replicationMode)
Persist the state of the given detached instance according to the
given replication mode, reusing the current identifier value.
|
Serializable |
save(Object entity)
Persist the given transient instance.
|
Serializable |
save(String entityName,
Object entity)
Persist the given transient instance.
|
void |
saveOrUpdate(Object entity)
Save or update the given persistent instance,
according to its id (matching the configured "unsaved-value"?).
|
void |
saveOrUpdate(String entityName,
Object entity)
Save or update the given persistent instance,
according to its id (matching the configured "unsaved-value"?).
|
void |
saveOrUpdateAll(Collection entities)
Save or update all given persistent instances,
according to its id (matching the configured "unsaved-value"?).
|
void |
setAllowCreate(boolean allowCreate)
Set if a new
Session should be created when no transactional
Session can be found for the current thread. |
void |
setAlwaysUseNewSession(boolean alwaysUseNewSession)
Set whether to always use a new Hibernate Session for this template.
|
void |
setCacheQueries(boolean cacheQueries)
Set whether to cache all queries executed by this template.
|
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).
|
void |
setExposeNativeSession(boolean exposeNativeSession)
Set whether to expose the native Hibernate Session to
HibernateCallback code.
|
void |
setFetchSize(int fetchSize)
Set the fetch size for this HibernateTemplate.
|
void |
setMaxResults(int maxResults)
Set the maximum number of rows for this HibernateTemplate.
|
void |
setQueryCacheRegion(String queryCacheRegion)
Set the name of the cache region for queries executed by this template.
|
void |
update(Object entity)
Update the given persistent instance,
associating it with the current Hibernate
Session . |
void |
update(Object entity,
LockMode lockMode)
Update the given persistent instance,
associating it with the current Hibernate
Session . |
void |
update(String entityName,
Object entity)
Update the given persistent instance,
associating it with the current Hibernate
Session . |
void |
update(String entityName,
Object entity,
LockMode lockMode)
Update the given persistent instance,
associating it with the current Hibernate
Session . |
afterPropertiesSet, applyFlushMode, convertHibernateAccessException, convertJdbcAccessException, convertJdbcAccessException, disableFilters, enableFilters, flushIfNecessary, getDefaultJdbcExceptionTranslator, getEntityInterceptor, getFilterNames, getFlushMode, getJdbcExceptionTranslator, getSessionFactory, setBeanFactory, setEntityInterceptor, setEntityInterceptorBeanName, setFilterName, setFilterNames, setFlushMode, setFlushModeName, setJdbcExceptionTranslator, setSessionFactory
public HibernateTemplate()
public HibernateTemplate(SessionFactory sessionFactory)
sessionFactory
- SessionFactory to create Sessionspublic HibernateTemplate(SessionFactory sessionFactory, boolean allowCreate)
sessionFactory
- SessionFactory to create SessionsallowCreate
- if a non-transactional Session should be created when no
transactional Session can be found for the current threadpublic void setAllowCreate(boolean allowCreate)
Session
should be created when no transactional
Session
can be found for the current thread.
The default value is true
.
HibernateTemplate
is aware of a corresponding
Session
bound to the current thread, for example when using
HibernateTransactionManager
. If allowCreate
is
true
, a new non-transactional Session
will be
created if none is found, which needs to be closed at the end of the operation.
If false
, an IllegalStateException
will get thrown in
this case.
NOTE: As of Spring 2.5, switching allowCreate
to false
will delegate to Hibernate's
SessionFactory.getCurrentSession()
method,
which - with Spring-based setup - will by default delegate to Spring's
SessionFactoryUtils.getSession(sessionFactory, false)
.
This mode also allows for custom Hibernate CurrentSessionContext strategies
to be plugged in, whereas allowCreate
set to true
will always use a Spring-managed Hibernate Session.
public boolean isAllowCreate()
public void setAlwaysUseNewSession(boolean alwaysUseNewSession)
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 boolean isAlwaysUseNewSession()
public void setExposeNativeSession(boolean exposeNativeSession)
Default is "false": a Session proxy will be returned, suppressing
close
calls and automatically applying query cache
settings and transaction timeouts.
public boolean isExposeNativeSession()
public void setCheckWriteOperations(boolean checkWriteOperations)
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 boolean isCheckWriteOperations()
public void setCacheQueries(boolean cacheQueries)
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 boolean isCacheQueries()
public void setQueryCacheRegion(String queryCacheRegion)
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 String getQueryCacheRegion()
public void setFetchSize(int fetchSize)
Default is 0, indicating to use the JDBC driver's default.
public int getFetchSize()
public void setMaxResults(int maxResults)
Default is 0, indicating to use the JDBC driver's default.
public int getMaxResults()
public <T> T execute(HibernateCallback<T> action) throws DataAccessException
HibernateOperations
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.
execute
in interface HibernateOperations
action
- callback object that specifies the Hibernate actionnull
DataAccessException
- in case of Hibernate errorsHibernateTransactionManager
,
Session
public List executeFind(HibernateCallback<?> action) throws DataAccessException
HibernateOperations
List
.
This is a convenience method for executing Hibernate find calls or queries within an action.
executeFind
in interface HibernateOperations
action
- calback object that specifies the Hibernate actionnull
DataAccessException
- in case of Hibernate errorspublic <T> T executeWithNewSession(HibernateCallback<T> action)
Session
.
This execute variant overrides the template-wide
"alwaysUseNewSession"
setting.
action
- callback object that specifies the Hibernate actionnull
DataAccessException
- in case of Hibernate errorspublic <T> T executeWithNativeSession(HibernateCallback<T> action)
Session
.
This execute variant overrides the template-wide
"exposeNativeSession"
setting.
action
- callback object that specifies the Hibernate actionnull
DataAccessException
- in case of Hibernate errorsprotected <T> T doExecute(HibernateCallback<T> action, boolean enforceNewSession, boolean enforceNativeSession) throws DataAccessException
action
- callback object that specifies the Hibernate actionenforceNewSession
- whether to enforce a new Session for this template
even if there is a pre-bound transactional SessionenforceNativeSession
- whether to enforce exposure of the native
Hibernate Session to callback codenull
DataAccessException
- in case of Hibernate errorsprotected Session getSession()
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 otherwise (new only if no transactional or otherwise pre-bound Session exists).
null
)SessionFactoryUtils.getSession(org.hibernate.SessionFactory, boolean)
,
SessionFactoryUtils.getNewSession(org.hibernate.SessionFactory)
,
setAlwaysUseNewSession(boolean)
,
setAllowCreate(boolean)
protected Session createSessionProxy(Session session)
session
- the Hibernate Session to create a proxy forSession.close()
,
prepareQuery(org.hibernate.Query)
,
prepareCriteria(org.hibernate.Criteria)
public <T> T get(Class<T> entityClass, Serializable id) throws DataAccessException
HibernateOperations
null
if not found.
This method is a thin wrapper around
Session.get(Class, java.io.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.
get
in interface HibernateOperations
entityClass
- a persistent classid
- the identifier of the persistent instancenull
if not foundDataAccessException
- in case of Hibernate errorsSession.get(Class, java.io.Serializable)
public <T> T get(Class<T> entityClass, Serializable id, LockMode lockMode) throws DataAccessException
HibernateOperations
null
if not found.
Obtains the specified lock mode if the instance exists.
This method is a thin wrapper around
Session.get(Class, java.io.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.
get
in interface HibernateOperations
entityClass
- a persistent classid
- the identifier of the persistent instancelockMode
- the lock mode to obtainnull
if not foundDataAccessException
- in case of Hibernate errorsSession.get(Class, java.io.Serializable, org.hibernate.LockMode)
public Object get(String entityName, Serializable id) throws DataAccessException
HibernateOperations
null
if not found.
This method is a thin wrapper around
Session.get(String, java.io.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.
get
in interface HibernateOperations
entityName
- the name of the persistent entityid
- the identifier of the persistent instancenull
if not foundDataAccessException
- in case of Hibernate errorsSession.get(Class, java.io.Serializable)
public Object get(String entityName, Serializable id, LockMode lockMode) throws DataAccessException
HibernateOperations
null
if not found.
Obtains the specified lock mode if the instance exists.
This method is a thin wrapper around
Session.get(String, java.io.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.
get
in interface HibernateOperations
entityName
- the name of the persistent entityid
- the identifier of the persistent instancelockMode
- the lock mode to obtainnull
if not foundDataAccessException
- in case of Hibernate errorsSession.get(Class, java.io.Serializable, org.hibernate.LockMode)
public <T> T load(Class<T> entityClass, Serializable id) throws DataAccessException
HibernateOperations
This method is a thin wrapper around
Session.load(Class, java.io.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.
load
in interface HibernateOperations
entityClass
- a persistent classid
- the identifier of the persistent instanceObjectRetrievalFailureException
- if not foundDataAccessException
- in case of Hibernate errorsSession.load(Class, java.io.Serializable)
public <T> T load(Class<T> entityClass, Serializable id, LockMode lockMode) throws DataAccessException
HibernateOperations
This method is a thin wrapper around
Session.load(Class, java.io.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.
load
in interface HibernateOperations
entityClass
- a persistent classid
- the identifier of the persistent instancelockMode
- the lock mode to obtainObjectRetrievalFailureException
- if not foundDataAccessException
- in case of Hibernate errorsSession.load(Class, java.io.Serializable)
public Object load(String entityName, Serializable id) throws DataAccessException
HibernateOperations
This method is a thin wrapper around
Session.load(String, java.io.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.
load
in interface HibernateOperations
entityName
- the name of the persistent entityid
- the identifier of the persistent instanceObjectRetrievalFailureException
- if not foundDataAccessException
- in case of Hibernate errorsSession.load(Class, java.io.Serializable)
public Object load(String entityName, Serializable id, LockMode lockMode) throws DataAccessException
HibernateOperations
Obtains the specified lock mode if the instance exists.
This method is a thin wrapper around
Session.load(String, java.io.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.
load
in interface HibernateOperations
entityName
- the name of the persistent entityid
- the identifier of the persistent instancelockMode
- the lock mode to obtainObjectRetrievalFailureException
- if not foundDataAccessException
- in case of Hibernate errorsSession.load(Class, java.io.Serializable)
public <T> List<T> loadAll(Class<T> entityClass) throws DataAccessException
HibernateOperations
loadAll
in interface HibernateOperations
entityClass
- a persistent classList
containing 0 or more persistent instancesDataAccessException
- if there is a Hibernate errorSharedSessionContract.createCriteria(java.lang.Class)
public void load(Object entity, Serializable id) throws DataAccessException
HibernateOperations
This method is a thin wrapper around
Session.load(Object, java.io.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.
load
in interface HibernateOperations
entity
- the object (of the target class) to load intoid
- the identifier of the persistent instanceObjectRetrievalFailureException
- if not foundDataAccessException
- in case of Hibernate errorsSession.load(Object, java.io.Serializable)
public void refresh(Object entity) throws DataAccessException
HibernateOperations
refresh
in interface HibernateOperations
entity
- the persistent instance to re-readDataAccessException
- in case of Hibernate errorsSession.refresh(Object)
public void refresh(Object entity, LockMode lockMode) throws DataAccessException
HibernateOperations
refresh
in interface HibernateOperations
entity
- the persistent instance to re-readlockMode
- the lock mode to obtainDataAccessException
- in case of Hibernate errorsSession.refresh(Object, org.hibernate.LockMode)
public boolean contains(Object entity) throws DataAccessException
HibernateOperations
contains
in interface HibernateOperations
entity
- the persistence instance to checkDataAccessException
- if there is a Hibernate errorSession.contains(java.lang.Object)
public void evict(Object entity) throws DataAccessException
HibernateOperations
Session
cache.evict
in interface HibernateOperations
entity
- the persistent instance to evictDataAccessException
- in case of Hibernate errorsSession.evict(java.lang.Object)
public void initialize(Object proxy) throws DataAccessException
HibernateOperations
initialize
in interface HibernateOperations
proxy
- a proxy for a persistent object or a persistent collectionDataAccessException
- if we can't initialize the proxy, for example
because it is not associated with an active SessionHibernate.initialize(java.lang.Object)
public Filter enableFilter(String filterName) throws IllegalStateException
HibernateOperations
Filter
for the given filter name.
The returned Filter
instance can be used to set filter parameters.enableFilter
in interface HibernateOperations
filterName
- the name of the filterFilter
(either already
enabled or enabled on the fly by this operation)IllegalStateException
- if we are not running within a
transactional Session (in which case this operation does not make sense)public void lock(Object entity, LockMode lockMode) throws DataAccessException
HibernateOperations
lock
in interface HibernateOperations
entity
- the persistent instance to locklockMode
- the lock mode to obtainObjectOptimisticLockingFailureException
- if not foundDataAccessException
- in case of Hibernate errorsSession.lock(Object, org.hibernate.LockMode)
public void lock(String entityName, Object entity, LockMode lockMode) throws DataAccessException
HibernateOperations
lock
in interface HibernateOperations
entityName
- the name of the persistent entityentity
- the persistent instance to locklockMode
- the lock mode to obtainObjectOptimisticLockingFailureException
- if not foundDataAccessException
- in case of Hibernate errorsSession.lock(String, Object, org.hibernate.LockMode)
public Serializable save(Object entity) throws DataAccessException
HibernateOperations
save
in interface HibernateOperations
entity
- the transient instance to persistDataAccessException
- in case of Hibernate errorsSession.save(Object)
public Serializable save(String entityName, Object entity) throws DataAccessException
HibernateOperations
save
in interface HibernateOperations
entityName
- the name of the persistent entityentity
- the transient instance to persistDataAccessException
- in case of Hibernate errorsSession.save(String, Object)
public void update(Object entity) throws DataAccessException
HibernateOperations
Session
.update
in interface HibernateOperations
entity
- the persistent instance to updateDataAccessException
- in case of Hibernate errorsSession.update(Object)
public void update(Object entity, LockMode lockMode) throws DataAccessException
HibernateOperations
Session
.
Obtains the specified lock mode if the instance exists, implicitly checking whether the corresponding database entry still exists.
update
in interface HibernateOperations
entity
- the persistent instance to updatelockMode
- the lock mode to obtainObjectOptimisticLockingFailureException
- if not foundDataAccessException
- in case of Hibernate errorsSession.update(Object)
public void update(String entityName, Object entity) throws DataAccessException
HibernateOperations
Session
.update
in interface HibernateOperations
entityName
- the name of the persistent entityentity
- the persistent instance to updateDataAccessException
- in case of Hibernate errorsSession.update(String, Object)
public void update(String entityName, Object entity, LockMode lockMode) throws DataAccessException
HibernateOperations
Session
.
Obtains the specified lock mode if the instance exists, implicitly checking whether the corresponding database entry still exists.
update
in interface HibernateOperations
entityName
- the name of the persistent entityentity
- the persistent instance to updatelockMode
- the lock mode to obtainObjectOptimisticLockingFailureException
- if not foundDataAccessException
- in case of Hibernate errorsSession.update(String, Object)
public void saveOrUpdate(Object entity) throws DataAccessException
HibernateOperations
Session
.saveOrUpdate
in interface HibernateOperations
entity
- the persistent instance to save or update
(to be associated with the Hibernate Session
)DataAccessException
- in case of Hibernate errorsSession.saveOrUpdate(Object)
public void saveOrUpdate(String entityName, Object entity) throws DataAccessException
HibernateOperations
Session
.saveOrUpdate
in interface HibernateOperations
entityName
- the name of the persistent entityentity
- the persistent instance to save or update
(to be associated with the Hibernate Session
)DataAccessException
- in case of Hibernate errorsSession.saveOrUpdate(String, Object)
public void saveOrUpdateAll(Collection entities) throws DataAccessException
HibernateOperations
Session
.saveOrUpdateAll
in interface HibernateOperations
entities
- the persistent instances to save or update
(to be associated with the Hibernate Session
)DataAccessException
- in case of Hibernate errorspublic void replicate(Object entity, ReplicationMode replicationMode) throws DataAccessException
HibernateOperations
replicate
in interface HibernateOperations
entity
- the persistent object to replicatereplicationMode
- the Hibernate ReplicationModeDataAccessException
- in case of Hibernate errorsSession.replicate(Object, org.hibernate.ReplicationMode)
public void replicate(String entityName, Object entity, ReplicationMode replicationMode) throws DataAccessException
HibernateOperations
replicate
in interface HibernateOperations
entityName
- the name of the persistent entityentity
- the persistent object to replicatereplicationMode
- the Hibernate ReplicationModeDataAccessException
- in case of Hibernate errorsSession.replicate(String, Object, org.hibernate.ReplicationMode)
public void persist(Object entity) throws DataAccessException
HibernateOperations
Similar to save
, associating the given object
with the current Hibernate Session
.
persist
in interface HibernateOperations
entity
- the persistent instance to persistDataAccessException
- in case of Hibernate errorsSession.persist(Object)
,
HibernateOperations.save(java.lang.Object)
public void persist(String entityName, Object entity) throws DataAccessException
HibernateOperations
Similar to save
, associating the given object
with the current Hibernate Session
.
persist
in interface HibernateOperations
entityName
- the name of the persistent entityentity
- the persistent instance to persistDataAccessException
- in case of Hibernate errorsSession.persist(String, Object)
,
HibernateOperations.save(java.lang.Object)
public <T> T merge(T entity) throws DataAccessException
HibernateOperations
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.
merge
in interface HibernateOperations
entity
- the object to merge with the corresponding persistence instanceDataAccessException
- in case of Hibernate errorsSession.merge(Object)
,
HibernateOperations.saveOrUpdate(java.lang.Object)
,
IdTransferringMergeEventListener
public <T> T merge(String entityName, T entity) throws DataAccessException
HibernateOperations
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.
merge
in interface HibernateOperations
entityName
- the name of the persistent entityentity
- the object to merge with the corresponding persistence instanceDataAccessException
- in case of Hibernate errorsSession.merge(String, Object)
,
HibernateOperations.saveOrUpdate(java.lang.Object)
public void delete(Object entity) throws DataAccessException
HibernateOperations
delete
in interface HibernateOperations
entity
- the persistent instance to deleteDataAccessException
- in case of Hibernate errorsSession.delete(Object)
public void delete(Object entity, LockMode lockMode) throws DataAccessException
HibernateOperations
Obtains the specified lock mode if the instance exists, implicitly checking whether the corresponding database entry still exists.
delete
in interface HibernateOperations
entity
- the persistent instance to deletelockMode
- the lock mode to obtainObjectOptimisticLockingFailureException
- if not foundDataAccessException
- in case of Hibernate errorsSession.delete(Object)
public void delete(String entityName, Object entity) throws DataAccessException
HibernateOperations
delete
in interface HibernateOperations
entityName
- the name of the persistent entityentity
- the persistent instance to deleteDataAccessException
- in case of Hibernate errorsSession.delete(Object)
public void delete(String entityName, Object entity, LockMode lockMode) throws DataAccessException
HibernateOperations
Obtains the specified lock mode if the instance exists, implicitly checking whether the corresponding database entry still exists.
delete
in interface HibernateOperations
entityName
- the name of the persistent entityentity
- the persistent instance to deletelockMode
- the lock mode to obtainObjectOptimisticLockingFailureException
- if not foundDataAccessException
- in case of Hibernate errorsSession.delete(Object)
public void deleteAll(Collection entities) throws DataAccessException
HibernateOperations
This can be combined with any of the find methods to delete by query in two lines of code.
deleteAll
in interface HibernateOperations
entities
- the persistent instances to deleteDataAccessException
- in case of Hibernate errorsSession.delete(Object)
public void flush() throws DataAccessException
HibernateOperations
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.
flush
in interface HibernateOperations
DataAccessException
- in case of Hibernate errorsSession.flush()
public void clear() throws DataAccessException
HibernateOperations
Session
cache, and
cancel all pending saves, updates and deletes.clear
in interface HibernateOperations
DataAccessException
- in case of Hibernate errorsSession.clear()
public List find(String queryString) throws DataAccessException
HibernateOperations
find
in interface HibernateOperations
queryString
- a query expressed in Hibernate's query languageList
containing the results of the query executionDataAccessException
- in case of Hibernate errorsSharedSessionContract.createQuery(java.lang.String)
public List find(String queryString, Object value) throws DataAccessException
HibernateOperations
find
in interface HibernateOperations
queryString
- a query expressed in Hibernate's query languagevalue
- the value of the parameterList
containing the results of the query executionDataAccessException
- in case of Hibernate errorsSharedSessionContract.createQuery(java.lang.String)
public List find(String queryString, Object... values) throws DataAccessException
HibernateOperations
find
in interface HibernateOperations
queryString
- a query expressed in Hibernate's query languagevalues
- the values of the parametersList
containing the results of the query executionDataAccessException
- in case of Hibernate errorsSharedSessionContract.createQuery(java.lang.String)
public List findByNamedParam(String queryString, String paramName, Object value) throws DataAccessException
HibernateOperations
findByNamedParam
in interface HibernateOperations
queryString
- a query expressed in Hibernate's query languageparamName
- the name of the parametervalue
- the value of the parameterList
containing the results of the query executionDataAccessException
- in case of Hibernate errorsSharedSessionContract.getNamedQuery(String)
public List findByNamedParam(String queryString, String[] paramNames, Object[] values) throws DataAccessException
HibernateOperations
findByNamedParam
in interface HibernateOperations
queryString
- a query expressed in Hibernate's query languageparamNames
- the names of the parametersvalues
- the values of the parametersList
containing the results of the query executionDataAccessException
- in case of Hibernate errorsSharedSessionContract.getNamedQuery(String)
public List findByValueBean(String queryString, Object valueBean) throws DataAccessException
HibernateOperations
findByValueBean
in interface HibernateOperations
queryString
- a query expressed in Hibernate's query languagevalueBean
- the values of the parametersList
containing the results of the query executionDataAccessException
- in case of Hibernate errorsQuery.setProperties(java.lang.Object)
,
SharedSessionContract.createQuery(java.lang.String)
public List findByNamedQuery(String queryName) throws DataAccessException
HibernateOperations
A named query is defined in a Hibernate mapping file.
findByNamedQuery
in interface HibernateOperations
queryName
- the name of a Hibernate query in a mapping fileList
containing the results of the query executionDataAccessException
- in case of Hibernate errorsSharedSessionContract.getNamedQuery(String)
public List findByNamedQuery(String queryName, Object value) throws DataAccessException
HibernateOperations
A named query is defined in a Hibernate mapping file.
findByNamedQuery
in interface HibernateOperations
queryName
- the name of a Hibernate query in a mapping filevalue
- the value of the parameterList
containing the results of the query executionDataAccessException
- in case of Hibernate errorsSharedSessionContract.getNamedQuery(String)
public List findByNamedQuery(String queryName, Object... values) throws DataAccessException
HibernateOperations
A named query is defined in a Hibernate mapping file.
findByNamedQuery
in interface HibernateOperations
queryName
- the name of a Hibernate query in a mapping filevalues
- the values of the parametersList
containing the results of the query executionDataAccessException
- in case of Hibernate errorsSharedSessionContract.getNamedQuery(String)
public List findByNamedQueryAndNamedParam(String queryName, String paramName, Object value) throws DataAccessException
HibernateOperations
A named query is defined in a Hibernate mapping file.
findByNamedQueryAndNamedParam
in interface HibernateOperations
queryName
- the name of a Hibernate query in a mapping fileparamName
- the name of parametervalue
- the value of the parameterList
containing the results of the query executionDataAccessException
- in case of Hibernate errorsSharedSessionContract.getNamedQuery(String)
public List findByNamedQueryAndNamedParam(String queryName, String[] paramNames, Object[] values) throws DataAccessException
HibernateOperations
A named query is defined in a Hibernate mapping file.
findByNamedQueryAndNamedParam
in interface HibernateOperations
queryName
- the name of a Hibernate query in a mapping fileparamNames
- the names of the parametersvalues
- the values of the parametersList
containing the results of the query executionDataAccessException
- in case of Hibernate errorsSharedSessionContract.getNamedQuery(String)
public List findByNamedQueryAndValueBean(String queryName, Object valueBean) throws DataAccessException
HibernateOperations
A named query is defined in a Hibernate mapping file.
findByNamedQueryAndValueBean
in interface HibernateOperations
queryName
- the name of a Hibernate query in a mapping filevalueBean
- the values of the parametersList
containing the results of the query executionDataAccessException
- in case of Hibernate errorsQuery.setProperties(java.lang.Object)
,
SharedSessionContract.getNamedQuery(String)
public List findByCriteria(DetachedCriteria criteria) throws DataAccessException
HibernateOperations
findByCriteria
in interface HibernateOperations
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.List
containing 0 or more persistent instancesDataAccessException
- in case of Hibernate errorsDetachedCriteria.getExecutableCriteria(org.hibernate.Session)
public List findByCriteria(DetachedCriteria criteria, int firstResult, int maxResults) throws DataAccessException
HibernateOperations
findByCriteria
in interface HibernateOperations
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)List
containing 0 or more persistent instancesDataAccessException
- in case of Hibernate errorsDetachedCriteria.getExecutableCriteria(org.hibernate.Session)
,
Criteria.setFirstResult(int)
,
Criteria.setMaxResults(int)
public List findByExample(Object exampleEntity) throws DataAccessException
HibernateOperations
findByExample
in interface HibernateOperations
exampleEntity
- an instance of the desired entity,
serving as example for "query-by-example"List
containing 0 or more persistent instancesDataAccessException
- in case of Hibernate errorsExample.create(Object)
public List findByExample(String entityName, Object exampleEntity) throws DataAccessException
HibernateOperations
findByExample
in interface HibernateOperations
entityName
- the name of the persistent entityexampleEntity
- an instance of the desired entity,
serving as example for "query-by-example"List
containing 0 or more persistent instancesDataAccessException
- in case of Hibernate errorsExample.create(Object)
public List findByExample(Object exampleEntity, int firstResult, int maxResults) throws DataAccessException
HibernateOperations
findByExample
in interface HibernateOperations
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)List
containing 0 or more persistent instancesDataAccessException
- in case of Hibernate errorsExample.create(Object)
,
Criteria.setFirstResult(int)
,
Criteria.setMaxResults(int)
public List findByExample(String entityName, Object exampleEntity, int firstResult, int maxResults) throws DataAccessException
HibernateOperations
findByExample
in interface HibernateOperations
entityName
- the name of the persistent entityexampleEntity
- 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)List
containing 0 or more persistent instancesDataAccessException
- in case of Hibernate errorsExample.create(Object)
,
Criteria.setFirstResult(int)
,
Criteria.setMaxResults(int)
public Iterator iterate(String queryString) throws DataAccessException
HibernateOperations
Returns the results as an Iterator
. Entities returned are
initialized on demand. See the Hibernate API documentation for details.
iterate
in interface HibernateOperations
queryString
- a query expressed in Hibernate's query languageIterator
containing 0 or more persistent instancesDataAccessException
- in case of Hibernate errorsSharedSessionContract.createQuery(java.lang.String)
,
Query.iterate()
public Iterator iterate(String queryString, Object value) throws DataAccessException
HibernateOperations
Returns the results as an Iterator
. Entities returned are
initialized on demand. See the Hibernate API documentation for details.
iterate
in interface HibernateOperations
queryString
- a query expressed in Hibernate's query languagevalue
- the value of the parameterIterator
containing 0 or more persistent instancesDataAccessException
- in case of Hibernate errorsSharedSessionContract.createQuery(java.lang.String)
,
Query.iterate()
public Iterator iterate(String queryString, Object... values) throws DataAccessException
HibernateOperations
Returns the results as an Iterator
. Entities returned are
initialized on demand. See the Hibernate API documentation for details.
iterate
in interface HibernateOperations
queryString
- a query expressed in Hibernate's query languagevalues
- the values of the parametersIterator
containing 0 or more persistent instancesDataAccessException
- in case of Hibernate errorsSharedSessionContract.createQuery(java.lang.String)
,
Query.iterate()
public void closeIterator(Iterator it) throws DataAccessException
HibernateOperations
Iterator
created by any of the various
iterate(..)
operations, instead of waiting until the
session is closed or disconnected.closeIterator
in interface HibernateOperations
it
- the Iterator
to closeDataAccessException
- if the Iterator
could not be closedHibernate.close(java.util.Iterator)
public int bulkUpdate(String queryString) throws DataAccessException
HibernateOperations
bulkUpdate
in interface HibernateOperations
queryString
- an update/delete query expressed in Hibernate's query languageDataAccessException
- in case of Hibernate errorsSharedSessionContract.createQuery(java.lang.String)
,
Query.executeUpdate()
public int bulkUpdate(String queryString, Object value) throws DataAccessException
HibernateOperations
bulkUpdate
in interface HibernateOperations
queryString
- an update/delete query expressed in Hibernate's query languagevalue
- the value of the parameterDataAccessException
- in case of Hibernate errorsSharedSessionContract.createQuery(java.lang.String)
,
Query.executeUpdate()
public int bulkUpdate(String queryString, Object... values) throws DataAccessException
HibernateOperations
bulkUpdate
in interface HibernateOperations
queryString
- an update/delete query expressed in Hibernate's query languagevalues
- the values of the parametersDataAccessException
- in case of Hibernate errorsSharedSessionContract.createQuery(java.lang.String)
,
Query.executeUpdate()
protected void checkWriteOperationAllowed(Session session) throws InvalidDataAccessApiUsageException
Default implementation throws an InvalidDataAccessApiUsageException in
case of FlushMode.MANUAL
. Can be overridden in subclasses.
session
- current Hibernate SessionInvalidDataAccessApiUsageException
- if write operations are not allowedsetCheckWriteOperations(boolean)
,
HibernateAccessor.getFlushMode()
,
HibernateAccessor.FLUSH_EAGER
,
Session.getFlushMode()
,
FlushMode.MANUAL
protected void prepareQuery(Query queryObject)
queryObject
- the Query object to preparesetCacheQueries(boolean)
,
setQueryCacheRegion(java.lang.String)
,
SessionFactoryUtils.applyTransactionTimeout(org.hibernate.Query, org.hibernate.SessionFactory)
protected void prepareCriteria(Criteria criteria)
criteria
- the Criteria object to preparesetCacheQueries(boolean)
,
setQueryCacheRegion(java.lang.String)
,
SessionFactoryUtils.applyTransactionTimeout(org.hibernate.Query, org.hibernate.SessionFactory)
protected void applyNamedParameterToQuery(Query queryObject, String paramName, Object value) throws HibernateException
queryObject
- the Query objectparamName
- the name of the parametervalue
- the value of the parameterHibernateException
- if thrown by the Query object