HibernateTemplate源码
-
-
- package
org.springframework.orm.hibernate3; -
- import
java.io.Serializable; - import
java.lang.reflect.InvocationHandler; - import
java.lang.reflect.InvocationTargetExceptio n; - import
java.lang.reflect.Method; - import
java.lang.reflect.Proxy; - import
java.sql.SQLException; - import
java.util.Collection; - import
java.util.Iterator; - import
java.util.List; -
- import
org.hibernate.Criteria; - import
org.hibernate.Filter; - import
org.hibernate.FlushMode; - import
org.hibernate.Hibernate; - import
org.hibernate.HibernateException; - import
org.hibernate.LockMode; - import
org.hibernate.Query; - import
org.hibernate.ReplicationMode; - import
org.hibernate.Session; - import
org.hibernate.SessionFactory; - import
org.hibernate.criterion.DetachedCriteria; - import
org.hibernate.criterion.Example; - import
org.hibernate.engine.SessionImplementor; - import
org.hibernate.event.EventSource; -
- import
org.springframework.dao.DataAccessException; - import
org.springframework.dao.DataAccessResourceFailur eException; - import
org.springframework.dao.InvalidDataAccessApiUsag eException; - import
org.springframework.util.Assert; -
-
- public
class HibernateTemplate extendsHibernateAccessor implementsHibernateOperations { -
-
private boolean allowCreate true;= -
-
private boolean alwaysUseNewSession false;= -
-
private boolean exposeNativeSession false;= -
-
private boolean checkWriteOperations true;= -
-
private boolean cacheQueries false;= -
-
private String queryCacheRegion; -
-
private int fetchSize 0;= -
-
private int maxResults 0;= -
-
-
-
public HibernateTemplate() { -
} -
-
-
public HibernateTemplate(SessionFactory sessionFactory) { -
setSessionFactory(sessionFactory); -
afterPropertiesSet(); -
} -
-
-
public HibernateTemplate(SessionFactory booleansessionFactory, allowCreate) { -
setSessionFactory(sessionFactory); -
setAllowCreate(allowCreate); -
afterPropertiesSet(); -
} -
-
-
-
public void setAllowCreate( booleanallowCreate) { -
this.allowCreate = allowCreate; -
} -
-
-
public boolean isAllowCreate() { -
return this.allowCreate; -
} -
-
-
public void setAlwaysUseNewSession( booleanalwaysUseNewSession) { -
this.alwaysUseNewSession = alwaysUseNewSession; -
} -
-
-
public boolean isAlwaysUseNewSession() { -
return this.alwaysUseNewSession; -
} -
-
-
public void setExposeNativeSession( booleanexposeNativeSession) { -
this.exposeNativeSession = exposeNativeSession; -
} -
-
-
public boolean isExposeNativeSession() { -
return this.exposeNativeSession; -
} -
-
-
public void setCheckWriteOperations( booleancheckWriteOperations) { -
this.checkWriteOperations = checkWriteOperations; -
} -
-
-
public boolean isCheckWriteOperations() { -
return this.checkWriteOperations; -
} -
-
-
public void setCacheQueries( booleancacheQueries) { -
this.cacheQueries = cacheQueries; -
} -
-
-
public boolean isCacheQueries() { -
return this.cacheQueries; -
} -
-
-
public void setQueryCacheRegion(String queryCacheRegion) { -
this.queryCacheRegion = queryCacheRegion; -
} -
-
-
public String getQueryCacheRegion() { -
return this.queryCacheRegion; -
} -
-
-
public void setFetchSize( intfetchSize) { -
this.fetchSize = fetchSize; -
} -
-
-
public int getFetchSize() { -
return this.fetchSize; -
} -
-
-
public void setMaxResults( intmaxResults) { -
this.maxResults = maxResults; -
} -
-
-
public int getMaxResults() { -
return this.maxResults; -
} -
-
-
public Object throwsexecute(HibernateCallback action) DataAccessException { -
return doExecute(action, false,false); -
} -
-
public List throwsexecuteFind(HibernateCallback action) DataAccessException { -
Object result = doExecute(action, false, false); -
if (result null!= && instanceof!(result List)) { -
throw new InvalidDataAccessApiUsag eException( -
"Result object returned from HibernateCallback isn't a List: [" + "]");result + -
} -
return (List) result; -
} -
-
-
public Object executeWithNewSession(HibernateCallback action) { -
return doExecute(action, true,false); -
} -
-
-
public Object executeWithNativeSession (HibernateCallback action) { -
return doExecute(action, false,true); -
} -
-
-
public Object booleanexecute(HibernateCallback action, enforceNativeSession) throwsDataAccessException { -
return doExecute(action, false,enforceNativeSession); -
} -
-
-
protected Object booleandoExecute(HibernateCallback action, enforceNewSession, booleanenforceNativeSession) -
throws DataAccessException { -
-
Assert.notNull(action, "Callback object );must not be null" -
-
Session session = (enforceNewSession ? -
SessionFactoryUtils.getNewSession(getSessionFactory(), getEntityInterceptor()) : getSession()); -
boolean existingTransaction = (!enforceNewSession && -
(!isAllowCreate() || SessionFactoryUtils.isSessionTransactional(session, getSessionFactory()))); -
if (existingTransaction) { -
logger.debug("Found thread-bound );Session for HibernateTemplate" -
} -
-
FlushMode previousFlushMode = null; -
try { -
previousFlushMode = applyFlushMode(session, existingTransaction); -
enableFilters(session); -
Session sessionToExpose = -
(enforceNativeSession || isExposeNativeSession() ? session : createSessionProxy(session)); -
Object result = action.doInHibernate(sessionToExpose); -
flushIfNecessary(session, existingTransaction); -
return result; -
} -
catch (HibernateException ex) { -
throw convertHibernateAccessEx ception(ex); -
} -
catch (SQLException ex) { -
throw convertJdbcAccessExcepti on(ex); -
} -
catch (RuntimeException ex) { -
// Callback code threw application exception... -
throw ex; -
} -
finally { -
if (existingTransaction) { -
logger.debug("Not closing );pre-bound Hibernate Session after HibernateTemplate" -
disableFilters(session); -
if (previousFlushMode null)!= { -
session.setFlushMode(previousFlushMode); -
} -
} -
else { -
// Never use deferred close for an explicitly new Session. -
if (isAlwaysUseNewSession()) { -
SessionFactoryUtils.closeSession(session); -
} -
else { -
SessionFactoryUtils.closeSessionOrRegisterDe ferredClose(session, getSessionFactory()); -
} -
} -
} -
} -
-
-
protected Session getSession() { -
if (isAlwaysUseNewSession()) { -
return SessionFactoryUtils.getNewSession(getSessionFactory(), getEntityInterceptor()); -
} -
else if (isAllowCreate()) { -
return SessionFactoryUtils.getSession( -
getSessionFactory(), getEntityInterceptor(), getJdbcExceptionTranslat or()); -
} -
else { -
try { -
return getSessionFactory().getCurrentSession(); -
} -
catch (HibernateException ex) { -
throw new DataAccessResourceFailur "CouldeException( not ,obtain current Hibernate Session" ex); -
} -
} -
} -
-
-
protected Session createSessionProxy(Session session) { -
Class[] sessionIfcs = null; -
Class mainIfc = (session instanceof org.hibernate.classic.Session ? -
org.hibernate.classic.Session.class : class);Session. -
if (session instanceofEventSource) { -
sessionIfcs = new Class[] class};{mainIfc, EventSource. -
} -
else if (session instanceofSessionImplementor) { -
sessionIfcs = new Class[] class};{mainIfc, SessionImplementor. -
} -
else { -
sessionIfcs = new Class[] {mainIfc}; -
} -
return (Session) Proxy.newProxyInstance( -
getClass().getClassLoader(), sessionIfcs, -
new CloseSuppressingInvocati onHandler(session)); -
} -
-
-
//------------------------------------------------------------------------- -
// Convenience methods for loading individual objects -
//------------------------------------------------------------------------- -
-
public Object throwsget(Class entityClass, Serializable id) DataAccessException { -
return get(entityClass, null);id, -
} -
-
public Object finalget( Class finalentityClass, Serializable finalid, LockMode lockMode) -
throws DataAccessException { -
-
return executeWithNativeSession new( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
if (lockMode null)!= { -
return session.get(entityClass, id, lockMode); -
} -
else { -
return session.get(entityClass, id); -
} -
} -
}); -
} -
-
public Object throwsget(String entityName, Serializable id) DataAccessException { -
return get(entityName, null);id, -
} -
-
public Object finalget( String finalentityName, Serializable finalid, LockMode lockMode) -
throws DataAccessException { -
-
return executeWithNativeSession new( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
if (lockMode null)!= { -
return session.get(entityName, id, lockMode); -
} -
else { -
return session.get(entityName, id); -
} -
} -
}); -
} -
-
public Object throwsload(Class entityClass, Serializable id) DataAccessException { -
return load(entityClass, null);id, -
} -
-
public Object finalload( Class finalentityClass, Serializable finalid, LockMode lockMode) -
throws DataAccessException { -
-
return executeWithNativeSession new( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
if (lockMode null)!= { -
return session.load(entityClass, id, lockMode); -
} -
else { -
return session.load(entityClass, id); -
} -
} -
}); -
} -
-
public Object throwsload(String entityName, Serializable id) DataAccessException { -
return load(entityName, null);id, -
} -
-
public Object finalload( String finalentityName, Serializable finalid, LockMode lockMode) -
throws DataAccessException { -
-
return executeWithNativeSession new( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
if (lockMode null)!= { -
return session.load(entityName, id, lockMode); -
} -
else { -
return session.load(entityName, id); -
} -
} -
}); -
} -
-
public List finalloadAll( Class throwsentityClass) DataAccessException { -
return (List) newexecuteWithNativeSession ( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
Criteria criteria = session.createCriteria(entityClass); -
prepareCriteria(criteria); -
return criteria.list(); -
} -
}); -
} -
-
public void load( finalObject finalentity, Serializable throwsid) DataAccessException { -
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
session.load(entity, id); -
return null; -
} -
}); -
} -
-
public void refresh( finalObject throwsentity) DataAccessException { -
refresh(entity, null); -
} -
-
public void refresh( finalObject finalentity, LockMode throwslockMode) DataAccessException { -
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
if (lockMode null)!= { -
session.refresh(entity, lockMode); -
} -
else { -
session.refresh(entity); -
} -
return null; -
} -
}); -
} -
-
public boolean contains( finalObject throwsentity) DataAccessException { -
Boolean result = (Boolean) executeWithNativeSession (new HibernateCallback() { -
public Object doInHibernate(Session session) { -
return (session.contains(entity) ? Boolean.TRUE : Boolean.FALSE); -
} -
}); -
return result.booleanValue(); -
} -
-
public void evict( finalObject throwsentity) DataAccessException { -
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
session.evict(entity); -
return null; -
} -
}); -
} -
-
public void initialize(Object throwsproxy) DataAccessException { -
try { -
Hibernate.initialize(proxy); -
} -
catch (HibernateException ex) { -
throw SessionFactoryUtils.convertHibernateAccessEx ception(ex); -
} -
} -
-
public Filter throwsenableFilter(String filterName) IllegalStateException { -
Session session = SessionFactoryUtils.getSession(getSessionFactory(), false); -
Filter filter = session.getEnabledFilter(filterName); -
if (filter null)== { -
filter = session.enableFilter(filterName); -
} -
return filter; -
} -
-
-
//------------------------------------------------------------------------- -
// Convenience methods for storing individual objects -
//------------------------------------------------------------------------- -
-
public void lock( finalObject finalentity, LockMode throwslockMode) DataAccessException { -
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
session.lock(entity, lockMode); -
return null; -
} -
}); -
} -
-
public void lock( finalString finalentityName, Object finalentity, LockMode lockMode) -
throws DataAccessException { -
-
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
session.lock(entityName, entity, lockMode); -
return null; -
} -
}); -
} -
-
public Serializable finalsave( Object throwsentity) DataAccessException { -
return (Serializable) newexecuteWithNativeSession ( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
return session.save(entity); -
} -
}); -
} -
-
public Serializable finalsave( String finalentityName, Object throwsentity) DataAccessException { -
return (Serializable) newexecuteWithNativeSession ( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
return session.save(entityName, entity); -
} -
}); -
} -
-
public void update(Object throwsentity) DataAccessException { -
update(entity, null); -
} -
-
public void update( finalObject finalentity, LockMode throwslockMode) DataAccessException { -
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
session.update(entity); -
if (lockMode null)!= { -
session.lock(entity, lockMode); -
} -
return null; -
} -
}); -
} -
-
public void update(String throwsentityName, Object entity) DataAccessException { -
update(entityName, entity, null); -
} -
-
public void update( finalString finalentityName, Object finalentity, LockMode lockMode) -
throws DataAccessException { -
-
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
session.update(entityName, entity); -
if (lockMode null)!= { -
session.lock(entity, lockMode); -
} -
return null; -
} -
}); -
} -
-
public void saveOrUpdate( finalObject throwsentity) DataAccessException { -
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
session.saveOrUpdate(entity); -
return null; -
} -
}); -
} -
-
public void saveOrUpdate( finalString finalentityName, Object throwsentity) DataAccessException { -
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
session.saveOrUpdate(entityName, entity); -
return null; -
} -
}); -
} -
-
public void saveOrUpdateAll( finalCollection throwsentities) DataAccessException { -
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
for (Iterator it = entities.iterator(); it.hasNext();) { -
session.saveOrUpdate(it.next()); -
} -
return null; -
} -
}); -
} -
-
public void replicate( finalObject finalentity, ReplicationMode replicationMode) -
throws DataAccessException { -
-
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
session.replicate(entity, replicationMode); -
return null; -
} -
}); -
} -
-
public void replicate( finalString finalentityName, Object finalentity, ReplicationMode replicationMode) -
throws DataAccessException { -
-
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
session.replicate(entityName, entity, replicationMode); -
return null; -
} -
}); -
} -
-
public void persist( finalObject throwsentity) DataAccessException { -
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
session.persist(entity); -
return null; -
} -
}); -
} -
-
public void persist( finalString finalentityName, Object throwsentity) DataAccessException { -
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
session.persist(entityName, entity); -
return null; -
} -
}); -
} -
-
public Object finalmerge( Object throwsentity) DataAccessException { -
return executeWithNativeSession new( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
return session.merge(entity); -
} -
}); -
} -
-
public Object finalmerge( String finalentityName, Object throwsentity) DataAccessException { -
return executeWithNativeSession new( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
return session.merge(entityName, entity); -
} -
}); -
} -
-
public void delete(Object throwsentity) DataAccessException { -
delete(entity, null); -
} -
-
public void delete( finalObject finalentity, LockMode throwslockMode) DataAccessException { -
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
if (lockMode null)!= { -
session.lock(entity, lockMode); -
} -
session.delete(entity); -
return null; -
} -
}); -
} -
-
public void delete(String throwsentityName, Object entity) DataAccessException { -
delete(entityName, entity, null); -
} -
-
public void delete( finalString finalentityName, Object finalentity, LockMode lockMode) -
throws DataAccessException { -
-
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
if (lockMode null)!= { -
session.lock(entityName, entity, lockMode); -
} -
session.delete(entityName, entity); -
return null; -
} -
}); -
} -
-
public void deleteAll( finalCollection throwsentities) DataAccessException { -
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
checkWriteOperationAllow ed(session); -
for (Iterator it = entities.iterator(); it.hasNext();) { -
session.delete(it.next()); -
} -
return null; -
} -
}); -
} -
-
public void flush() throwsDataAccessException { -
executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
session.flush(); -
return null; -
} -
}); -
} -
-
public void clear() throwsDataAccessException { -
executeWithNativeSession (new HibernateCallback() { -
public Object doInHibernate(Session session) { -
session.clear(); -
return null; -
} -
}); -
} -
-
-
//------------------------------------------------------------------------- -
// Convenience finder methods for HQL strings -
//------------------------------------------------------------------------- -
-
public List throwsfind(String queryString) DataAccessException { -
return find(queryString, null);(Object[]) -
} -
-
public List throwsfind(String queryString, Object value) DataAccessException { -
return find(queryString, newObject[] {value}); -
} -
-
public List finalfind( String finalqueryString, Object[] throwsvalues) DataAccessException { -
return (List) newexecuteWithNativeSession ( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
Query queryObject = session.createQuery(queryString); -
prepareQuery(queryObject); -
if (values null)!= { -
for ( inti 0;= i < values.length; i++) { -
queryObject.setParameter(i, values[i]); -
} -
} -
return queryObject.list(); -
} -
}); -
} -
-
public List findByNamedParam(String queryString, String paramName, Object value) -
throws DataAccessException { -
-
return findByNamedParam(queryString, newString[] new{paramName}, Object[] {value}); -
} -
-
public List finalfindByNamedParam( String finalqueryString, String[] finalparamNames, Object[] values) -
throws DataAccessException { -
-
if (paramNames.length != values.length) { -
throw new IllegalArgumentException "Length( of );paramNames array must match length of values array" -
} -
return (List) newexecuteWithNativeSession ( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
Query queryObject = session.createQuery(queryString); -
prepareQuery(queryObject); -
if (values null)!= { -
for ( inti 0;= i < values.length; i++) { -
applyNamedParameterToQue ry(queryObject, paramNames[i], values[i]); -
} -
} -
return queryObject.list(); -
} -
}); -
} -
-
public List finalfindByValueBean( String finalqueryString, Object valueBean) -
throws DataAccessException { -
-
return (List) newexecuteWithNativeSession ( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
Query queryObject = session.createQuery(queryString); -
prepareQuery(queryObject); -
queryObject.setProperties(valueBean); -
return queryObject.list(); -
} -
}); -
} -
-
-
//------------------------------------------------------------------------- -
// Convenience finder methods for named queries -
//------------------------------------------------------------------------- -
-
public List throwsfindByNamedQuery(String queryName) DataAccessException { -
return findByNamedQuery(queryName, null);(Object[]) -
} -
-
public List throwsfindByNamedQuery(String queryName, Object value) DataAccessException { -
return findByNamedQuery(queryName, newObject[] {value}); -
} -
-
public List finalfindByNamedQuery( String finalqueryName, Object[] throwsvalues) DataAccessException { -
return (List) newexecuteWithNativeSession ( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
Query queryObject = session.getNamedQuery(queryName); -
prepareQuery(queryObject); -
if (values null)!= { -
for ( inti 0;= i < values.length; i++) { -
queryObject.setParameter(i, values[i]); -
} -
} -
return queryObject.list(); -
} -
}); -
} -
-
public List findByNamedQueryAndNamed Param(String queryName, String paramName, Object value) -
throws DataAccessException { -
-
return findByNamedQueryAndNamed newParam(queryName, String[] new{paramName}, Object[] {value}); -
} -
-
public List findByNamedQueryAndNamed Param( -
final String finalqueryName, String[] finalparamNames, Object[] values) -
throws DataAccessException { -
-
if (paramNames null!= && nullvalues != && paramNames.length != values.length) { -
throw new IllegalArgumentException "Length( of );paramNames array must match length of values array" -
} -
return (List) newexecuteWithNativeSession ( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
Query queryObject = session.getNamedQuery(queryName); -
prepareQuery(queryObject); -
if (values null)!= { -
for ( inti 0;= i < values.length; i++) { -
applyNamedParameterToQue ry(queryObject, paramNames[i], values[i]); -
} -
} -
return queryObject.list(); -
} -
}); -
} -
-
public List finalfindByNamedQueryAndValue Bean( String finalqueryName, Object valueBean) -
throws DataAccessException { -
-
return (List) newexecuteWithNativeSession ( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
Query queryObject = session.getNamedQuery(queryName); -
prepareQuery(queryObject); -
queryObject.setProperties(valueBean); -
return queryObject.list(); -
} -
}); -
} -
-
-
//------------------------------------------------------------------------- -
// Convenience finder methods for detached criteria -
//------------------------------------------------------------------------- -
-
public List throwsfindByCriteria(DetachedCriteria criteria) DataAccessException { -
return findByCriteria(criteria, 1,- - 1); -
} -
-
public List finalfindByCriteria( DetachedCriteria finalcriteria, int firstResult, finalint maxResults) -
throws DataAccessException { -
-
Assert.notNull(criteria, "DetachedCriteria must );not be null" -
return (List) newexecuteWithNativeSession ( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
Criteria executableCriteria = criteria.getExecutableCriteria(session); -
prepareCriteria(executableCriteria); -
if (firstResult 0)>= { -
executableCriteria.setFirstResult(firstResult); -
} -
if (maxResults 0)> { -
executableCriteria.setMaxResults(maxResults); -
} -
return executableCriteria.list(); -
} -
}); -
} -
-
public List throwsfindByExample(Object exampleEntity) DataAccessException { -
return findByExample( null,exampleEntity, 1,- - 1); -
} -
-
public List throwsfindByExample(String entityName, Object exampleEntity) DataAccessException { -
return findByExample(entityName, 1,exampleEntity, - - 1); -
} -
-
public List intfindByExample(Object exampleEntity, firstResult, intmaxResults) throwsDataAccessException { -
return findByExample( null,exampleEntity, firstResult, maxResults); -
} -
-
public List findByExample( -
final String finalentityName, Object finalexampleEntity, int firstResult, finalint maxResults) -
throws DataAccessException { -
-
Assert.notNull(exampleEntity, "Example entity );must not be null" -
return (List) newexecuteWithNativeSession ( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
Criteria executableCriteria = (entityName != null ? -
session.createCriteria(entityName) : session.createCriteria(exampleEntity.getClass())); -
executableCriteria.add(Example.create(exampleEntity)); -
prepareCriteria(executableCriteria); -
if (firstResult 0)>= { -
executableCriteria.setFirstResult(firstResult); -
} -
if (maxResults 0)> { -
executableCriteria.setMaxResults(maxResults); -
} -
return executableCriteria.list(); -
} -
}); -
} -
-
-
//------------------------------------------------------------------------- -
// Convenience query methods for iteration and bulk updates/deletes -
//------------------------------------------------------------------------- -
-
public Iterator throwsiterate(String queryString) DataAccessException { -
return iterate(queryString, null);(Object[]) -
} -
-
public Iterator throwsiterate(String queryString, Object value) DataAccessException { -
return iterate(queryString, newObject[] {value}); -
} -
-
public Iterator finaliterate( String finalqueryString, Object[] throwsvalues) DataAccessException { -
return (Iterator) newexecuteWithNativeSession ( HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
Query queryObject = session.createQuery(queryString); -
prepareQuery(queryObject); -
if (values null)!= { -
for ( inti 0;= i < values.length; i++) { -
queryObject.setParameter(i, values[i]); -
} -
} -
return queryObject.iterate(); -
} -
}); -
} -
-
public void closeIterator(Iterator throwsit) DataAccessException { -
try { -
Hibernate.close(it); -
} -
catch (HibernateException ex) { -
throw SessionFactoryUtils.convertHibernateAccessEx ception(ex); -
} -
} -
-
public int bulkUpdate(String throwsqueryString) DataAccessException { -
return bulkUpdate(queryString, null);(Object[]) -
} -
-
public int bulkUpdate(String throwsqueryString, Object value) DataAccessException { -
return bulkUpdate(queryString, newObject[] {value}); -
} -
-
public int bulkUpdate( finalString finalqueryString, Object[] throwsvalues) DataAccessException { -
Integer updateCount = (Integer) executeWithNativeSession (new HibernateCallback() { -
public Object throwsdoInHibernate(Session session) HibernateException { -
Query queryObject = session.createQuery(queryString); -
prepareQuery(queryObject); -
if (values null)!= { -
for ( inti 0;= i < values.length; i++) { -
queryObject.setParameter(i, values[i]); -
} -
} -
return new Integer(queryObject.executeUpdate()); -
} -
}); -
return updateCount.intValue(); -
} -
-
-
//------------------------------------------------------------------------- -
// Helper methods used by the operations above -
//------------------------------------------------------------------------- -
-
-
protected void checkWriteOperationAllow throwsed(Session session) InvalidDataAccessApiUsag eException { -
if (isCheckWriteOperations() && getFlushMode() != FLUSH_EAGER && -
session.getFlushMode().lessThan(FlushMode.COMMIT)) { -
throw new InvalidDataAccessApiUsag eException( -
"Write operations +are not allowed in read-only mode (FlushMode.NEVER/MANUAL): " -
"Turn your );Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition." -
} -
} -
-
-
protected void prepareQuery(Query queryObject) { -
if (isCacheQueries()) { -
queryObject.setCacheable(true); -
if (getQueryCacheRegion() null)!= { -
queryObject.setCacheRegion(getQueryCacheRegion()); -
} -
} -
if (getFetchSize() 0)> { -
queryObject.setFetchSize(getFetchSize()); -
} -
if (getMaxResults() 0)> { -
queryObject.setMaxResults(getMaxResults()); -
} -
SessionFactoryUtils.applyTransactionTimeout(queryObject, getSessionFactory()); -
} -
-
-
protected void prepareCriteria(Criteria criteria) { -
if (isCacheQueries()) { -
criteria.setCacheable(true); -
if (getQueryCacheRegion() null)!= { -
criteria.setCacheRegion(getQueryCacheRegion()); -
} -
} -
if (getFetchSize() 0)> { -
criteria.setFetchSize(getFetchSize()); -
} -
if (getMaxResults() 0)> { -
criteria.setMaxResults(getMaxResults()); -
} -
SessionFactoryUtils.applyTransactionTimeout(criteria, getSessionFactory()); -
} -
-
-
protected void applyNamedParameterToQue ry(Query queryObject, String paramName, Object value) -
throws HibernateException { -
-
if (value instanceofCollection) { -
queryObject.setParameterList(paramName, (Collection) value); -
} -
else if (value instanceofObject[]) { -
queryObject.setParameterList(paramName, (Object[]) value); -
} -
else { -
queryObject.setParameter(paramName, value); -
} -
} -
-
-
-
private class CloseSuppressingInvocati implementsonHandler InvocationHandler { -
-
private final Session target; -
-
public CloseSuppressingInvocati onHandler(Session target) { -
this.target = target; -
} -
-
public Object throwsinvoke(Object proxy, Method method, Object[] args) Throwable { -
// Invocation on Session interface coming in... -
-
if (method.getName().equals( "equals")){ -
// Only consider equal when proxies are identical. -
return (proxy 0]== args[ ? Boolean.TRUE : Boolean.FALSE); -
} -
else if (method.getName().equals( "hashCode")){ -
// Use hashCode of Session proxy. -
return new Integer(hashCode()); -
} -
else if (method.getName().equals( "close")){ -
// Handle close method: suppress, not valid. -
return null; -
} -
-
// Invoke method on target Session. -
try { -
Object retVal = method.invoke(this.target, args); -
-
// If return value is a Query or Criteria, apply transaction timeout. -
// Applies to createQuery, getNamedQuery, createCriteria. -
if (retVal instanceofQuery) { -
prepareQuery(((Query) retVal)); -
} -
if (retVal instanceofCriteria) { -
prepareCriteria(((Criteria) retVal)); -
} -
-
return retVal; -
} -
catch (InvocationTargetExceptio n ex) { -
throw ex.getTargetException(); -
} -
} -
} -
- }