HibernateTemplate 源码
来源:互联网 发布:js json长度 编辑:程序博客网 时间:2024/06/05 19:12
package org.springframework.orm.hibernate3;import java.io.Serializable;import java.lang.reflect.InvocationHandler;import java.lang.reflect.InvocationTargetException;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.apache.commons.logging.Log;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.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.DataAccessResourceFailureException;import org.springframework.dao.InvalidDataAccessApiUsageException;import org.springframework.util.Assert;public class HibernateTemplate extends HibernateAccessor implements HibernateOperations{ 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 sessionFactory, boolean allowCreate) { setSessionFactory(sessionFactory); setAllowCreate(allowCreate); afterPropertiesSet(); } public void setAllowCreate(boolean allowCreate) { this.allowCreate = allowCreate; } public boolean isAllowCreate() { return this.allowCreate; } public void setAlwaysUseNewSession(boolean alwaysUseNewSession) { this.alwaysUseNewSession = alwaysUseNewSession; } public boolean isAlwaysUseNewSession() { return this.alwaysUseNewSession; } public void setExposeNativeSession(boolean exposeNativeSession) { this.exposeNativeSession = exposeNativeSession; } public boolean isExposeNativeSession() { return this.exposeNativeSession; } public void setCheckWriteOperations(boolean checkWriteOperations) { this.checkWriteOperations = checkWriteOperations; } public boolean isCheckWriteOperations() { return this.checkWriteOperations; } public void setCacheQueries(boolean cacheQueries) { 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(int fetchSize) { this.fetchSize = fetchSize; } public int getFetchSize() { return this.fetchSize; } public void setMaxResults(int maxResults) { this.maxResults = maxResults; } public int getMaxResults() { return this.maxResults; } public Object execute(HibernateCallback action) throws DataAccessException { return doExecute(action, false, false); } public List executeFind(HibernateCallback action) throws DataAccessException { Object result = doExecute(action, false, false); if ((result != null) && (!(result instanceof List))) { throw new InvalidDataAccessApiUsageException("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); } /** * @deprecated */ public Object execute(HibernateCallback action, boolean enforceNativeSession) throws DataAccessException { return doExecute(action, false, enforceNativeSession); } protected Object doExecute(HibernateCallback action, boolean enforceNewSession, boolean enforceNativeSession) throws DataAccessException { Assert.notNull(action, "Callback object must not be null"); org.hibernate.Session session = enforceNewSession ? SessionFactoryUtils.getNewSession(getSessionFactory(), getEntityInterceptor()) : getSession(); boolean existingTransaction = (!enforceNewSession) && ((!isAllowCreate()) || (SessionFactoryUtils.isSessionTransactional(session, getSessionFactory()))); if (existingTransaction) { this.logger.debug("Found thread-bound Session for HibernateTemplate"); } FlushMode previousFlushMode = null; try { previousFlushMode = applyFlushMode(session, existingTransaction); enableFilters(session); org.hibernate.Session sessionToExpose = (enforceNativeSession) || (isExposeNativeSession()) ? session : createSessionProxy(session); Object result = action.doInHibernate(sessionToExpose); flushIfNecessary(session, existingTransaction); return result; } catch (HibernateException ex) { throw convertHibernateAccessException(ex); } catch (SQLException ex) { throw convertJdbcAccessException(ex); } catch (RuntimeException ex) { throw ex; } finally { if (existingTransaction) { this.logger.debug("Not closing pre-bound Hibernate Session after HibernateTemplate"); disableFilters(session); if (previousFlushMode != null) { session.setFlushMode(previousFlushMode); } } else if (isAlwaysUseNewSession()) { SessionFactoryUtils.closeSession(session); } else { SessionFactoryUtils.closeSessionOrRegisterDeferredClose(session, getSessionFactory()); } } } protected org.hibernate.Session getSession() { if (isAlwaysUseNewSession()) { return SessionFactoryUtils.getNewSession(getSessionFactory(), getEntityInterceptor()); } if (isAllowCreate()) { return SessionFactoryUtils.getSession(getSessionFactory(), getEntityInterceptor(), getJdbcExceptionTranslator()); } if (SessionFactoryUtils.hasTransactionalSession(getSessionFactory())) { return SessionFactoryUtils.getSession(getSessionFactory(), false); } try { return getSessionFactory().getCurrentSession(); } catch (HibernateException ex) { throw new DataAccessResourceFailureException("Could not obtain current Hibernate Session", ex); } } protected org.hibernate.Session createSessionProxy(org.hibernate.Session session) { Class[] sessionIfcs = null; Class mainIfc = org.hibernate.Session.class; if ((session instanceof EventSource)) { sessionIfcs = new Class[] { mainIfc, EventSource.class }; } else if ((session instanceof SessionImplementor)) { sessionIfcs = new Class[] { mainIfc, SessionImplementor.class }; } else { sessionIfcs = new Class[] { mainIfc }; } return (org.hibernate.Session)Proxy.newProxyInstance(session.getClass().getClassLoader(), sessionIfcs, new CloseSuppressingInvocationHandler(session)); } public Object get(Class entityClass, Serializable id) throws DataAccessException { return get(entityClass, id, null); } public Object get(final Class entityClass, final Serializable id, final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { if (lockMode != null) { return session.get(entityClass, id, lockMode); } return session.get(entityClass, id); } }); } public Object get(String entityName, Serializable id) throws DataAccessException { return get(entityName, id, null); } public Object get(final String entityName, final Serializable id, final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { if (lockMode != null) { return session.get(entityName, id, lockMode); } return session.get(entityName, id); } }); } public Object load(Class entityClass, Serializable id) throws DataAccessException { return load(entityClass, id, null); } public Object load(final Class entityClass, final Serializable id, final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { if (lockMode != null) { return session.load(entityClass, id, lockMode); } return session.load(entityClass, id); } }); } public Object load(String entityName, Serializable id) throws DataAccessException { return load(entityName, id, null); } public Object load(final String entityName, final Serializable id, final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { if (lockMode != null) { return session.load(entityName, id, lockMode); } return session.load(entityName, id); } }); } public List loadAll(final Class entityClass) throws DataAccessException { (List)executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { Criteria criteria = session.createCriteria(entityClass); criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); HibernateTemplate.this.prepareCriteria(criteria); return criteria.list(); } }); } public void load(final Object entity, final Serializable id) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { session.load(entity, id); return null; } }); } public void refresh(Object entity) throws DataAccessException { refresh(entity, null); } public void refresh(final Object entity, final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { if (lockMode != null) { session.refresh(entity, lockMode); } else { session.refresh(entity); } return null; } }); } public boolean contains(final Object entity) throws DataAccessException { Boolean result = (Boolean)executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) { return session.contains(entity) ? Boolean.TRUE : Boolean.FALSE; } }); return result.booleanValue(); } public void evict(final Object entity) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { session.evict(entity); return null; } }); } public void initialize(Object proxy) throws DataAccessException { try { Hibernate.initialize(proxy); } catch (HibernateException ex) { throw SessionFactoryUtils.convertHibernateAccessException(ex); } } public Filter enableFilter(String filterName) throws IllegalStateException { org.hibernate.Session session = SessionFactoryUtils.getSession(getSessionFactory(), false); Filter filter = session.getEnabledFilter(filterName); if (filter == null) { filter = session.enableFilter(filterName); } return filter; } public void lock(final Object entity, final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { session.lock(entity, lockMode); return null; } }); } public void lock(final String entityName, final Object entity, final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { session.lock(entityName, entity, lockMode); return null; } }); } public Serializable save(final Object entity) throws DataAccessException { (Serializable)executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); return session.save(entity); } }); } public Serializable save(final String entityName, final Object entity) throws DataAccessException { (Serializable)executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); return session.save(entityName, entity); } }); } public void update(Object entity) throws DataAccessException { update(entity, null); } public void update(final Object entity, final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); session.update(entity); if (lockMode != null) { session.lock(entity, lockMode); } return null; } }); } public void update(String entityName, Object entity) throws DataAccessException { update(entityName, entity, null); } public void update(final String entityName, final Object entity, final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); session.update(entityName, entity); if (lockMode != null) { session.lock(entity, lockMode); } return null; } }); } public void saveOrUpdate(final Object entity) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); session.saveOrUpdate(entity); return null; } }); } public void saveOrUpdate(final String entityName, final Object entity) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); session.saveOrUpdate(entityName, entity); return null; } }); } public void saveOrUpdateAll(final Collection entities) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); for (Iterator it = entities.iterator(); it.hasNext();) { session.saveOrUpdate(it.next()); } return null; } }); } public void replicate(final Object entity, final ReplicationMode replicationMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); session.replicate(entity, replicationMode); return null; } }); } public void replicate(final String entityName, final Object entity, final ReplicationMode replicationMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); session.replicate(entityName, entity, replicationMode); return null; } }); } public void persist(final Object entity) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); session.persist(entity); return null; } }); } public void persist(final String entityName, final Object entity) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); session.persist(entityName, entity); return null; } }); } public Object merge(final Object entity) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); return session.merge(entity); } }); } public Object merge(final String entityName, final Object entity) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); return session.merge(entityName, entity); } }); } public void delete(Object entity) throws DataAccessException { delete(entity, null); } public void delete(final Object entity, final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); if (lockMode != null) { session.lock(entity, lockMode); } session.delete(entity); return null; } }); } public void delete(String entityName, Object entity) throws DataAccessException { delete(entityName, entity, null); } public void delete(final String entityName, final Object entity, final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); if (lockMode != null) { session.lock(entityName, entity, lockMode); } session.delete(entityName, entity); return null; } }); } public void deleteAll(final Collection entities) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { HibernateTemplate.this.checkWriteOperationAllowed(session); for (Iterator it = entities.iterator(); it.hasNext();) { session.delete(it.next()); } return null; } }); } public void flush() throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { session.flush(); return null; } }); } public void clear() throws DataAccessException { executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) { session.clear(); return null; } }); } public List find(String queryString) throws DataAccessException { return find(queryString, (Object[])null); } public List find(String queryString, Object value) throws DataAccessException { return find(queryString, new Object[] { value }); } public List find(final String queryString, final Object[] values) throws DataAccessException { (List)executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { Query queryObject = session.createQuery(queryString); HibernateTemplate.this.prepareQuery(queryObject); if (values != null) { for (int i = 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, new String[] { paramName }, new Object[] { value }); } public List findByNamedParam(final String queryString, final String[] paramNames, final Object[] values) throws DataAccessException { if (paramNames.length != values.length) { throw new IllegalArgumentException("Length of paramNames array must match length of values array"); } (List)executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { Query queryObject = session.createQuery(queryString); HibernateTemplate.this.prepareQuery(queryObject); if (values != null) { for (int i = 0; i < values.length; i++) { HibernateTemplate.this.applyNamedParameterToQuery(queryObject, paramNames[i], values[i]); } } return queryObject.list(); } }); } public List findByValueBean(final String queryString, final Object valueBean) throws DataAccessException { (List)executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { Query queryObject = session.createQuery(queryString); HibernateTemplate.this.prepareQuery(queryObject); queryObject.setProperties(valueBean); return queryObject.list(); } }); } public List findByNamedQuery(String queryName) throws DataAccessException { return findByNamedQuery(queryName, (Object[])null); } public List findByNamedQuery(String queryName, Object value) throws DataAccessException { return findByNamedQuery(queryName, new Object[] { value }); } public List findByNamedQuery(final String queryName, final Object[] values) throws DataAccessException { (List)executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { Query queryObject = session.getNamedQuery(queryName); HibernateTemplate.this.prepareQuery(queryObject); if (values != null) { for (int i = 0; i < values.length; i++) { queryObject.setParameter(i, values[i]); } } return queryObject.list(); } }); } public List findByNamedQueryAndNamedParam(String queryName, String paramName, Object value) throws DataAccessException { return findByNamedQueryAndNamedParam(queryName, new String[] { paramName }, new Object[] { value }); } public List findByNamedQueryAndNamedParam(final String queryName, final String[] paramNames, final Object[] values) throws DataAccessException { if ((paramNames != null) && (values != null) && (paramNames.length != values.length)) { throw new IllegalArgumentException("Length of paramNames array must match length of values array"); } (List)executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { Query queryObject = session.getNamedQuery(queryName); HibernateTemplate.this.prepareQuery(queryObject); if (values != null) { for (int i = 0; i < values.length; i++) { HibernateTemplate.this.applyNamedParameterToQuery(queryObject, paramNames[i], values[i]); } } return queryObject.list(); } }); } public List findByNamedQueryAndValueBean(final String queryName, final Object valueBean) throws DataAccessException { (List)executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { Query queryObject = session.getNamedQuery(queryName); HibernateTemplate.this.prepareQuery(queryObject); queryObject.setProperties(valueBean); return queryObject.list(); } }); } public List findByCriteria(DetachedCriteria criteria) throws DataAccessException { return findByCriteria(criteria, -1, -1); } public List findByCriteria(final DetachedCriteria criteria, final int firstResult, final int maxResults) throws DataAccessException { Assert.notNull(criteria, "DetachedCriteria must not be null"); (List)executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { Criteria executableCriteria = criteria.getExecutableCriteria(session); HibernateTemplate.this.prepareCriteria(executableCriteria); if (firstResult >= 0) { executableCriteria.setFirstResult(firstResult); } if (maxResults > 0) { executableCriteria.setMaxResults(maxResults); } return executableCriteria.list(); } }); } public List findByExample(Object exampleEntity) throws DataAccessException { return findByExample(null, exampleEntity, -1, -1); } public List findByExample(String entityName, Object exampleEntity) throws DataAccessException { return findByExample(entityName, exampleEntity, -1, -1); } public List findByExample(Object exampleEntity, int firstResult, int maxResults) throws DataAccessException { return findByExample(null, exampleEntity, firstResult, maxResults); } public List findByExample(final String entityName, final Object exampleEntity, final int firstResult, final int maxResults) throws DataAccessException { Assert.notNull(exampleEntity, "Example entity must not be null"); (List)executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { Criteria executableCriteria = entityName != null ? session.createCriteria(entityName) : session.createCriteria(exampleEntity.getClass()); executableCriteria.add(Example.create(exampleEntity)); HibernateTemplate.this.prepareCriteria(executableCriteria); if (firstResult >= 0) { executableCriteria.setFirstResult(firstResult); } if (maxResults > 0) { executableCriteria.setMaxResults(maxResults); } return executableCriteria.list(); } }); } public Iterator iterate(String queryString) throws DataAccessException { return iterate(queryString, (Object[])null); } public Iterator iterate(String queryString, Object value) throws DataAccessException { return iterate(queryString, new Object[] { value }); } public Iterator iterate(final String queryString, final Object[] values) throws DataAccessException { (Iterator)executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { Query queryObject = session.createQuery(queryString); HibernateTemplate.this.prepareQuery(queryObject); if (values != null) { for (int i = 0; i < values.length; i++) { queryObject.setParameter(i, values[i]); } } return queryObject.iterate(); } }); } public void closeIterator(Iterator it) throws DataAccessException { try { Hibernate.close(it); } catch (HibernateException ex) { throw SessionFactoryUtils.convertHibernateAccessException(ex); } } public int bulkUpdate(String queryString) throws DataAccessException { return bulkUpdate(queryString, (Object[])null); } public int bulkUpdate(String queryString, Object value) throws DataAccessException { return bulkUpdate(queryString, new Object[] { value }); } public int bulkUpdate(final String queryString, final Object[] values) throws DataAccessException { Integer updateCount = (Integer)executeWithNativeSession(new HibernateCallback() { public Object doInHibernate(org.hibernate.Session session) throws HibernateException { Query queryObject = session.createQuery(queryString); HibernateTemplate.this.prepareQuery(queryObject); if (values != null) { for (int i = 0; i < values.length; i++) { queryObject.setParameter(i, values[i]); } } return new Integer(queryObject.executeUpdate()); } }); return updateCount.intValue(); } protected void checkWriteOperationAllowed(org.hibernate.Session session) throws InvalidDataAccessApiUsageException { if ((isCheckWriteOperations()) && (getFlushMode() != 2) && (session.getFlushMode().lessThan(FlushMode.COMMIT))) { throw new InvalidDataAccessApiUsageException("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 applyNamedParameterToQuery(Query queryObject, String paramName, Object value) throws HibernateException { if ((value instanceof Collection)) { queryObject.setParameterList(paramName, (Collection)value); } else if ((value instanceof Object[])) { queryObject.setParameterList(paramName, (Object[])value); } else { queryObject.setParameter(paramName, value); } } private class CloseSuppressingInvocationHandler implements InvocationHandler { private final org.hibernate.Session target; public CloseSuppressingInvocationHandler(org.hibernate.Session target) { this.target = target; } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (method.getName().equals("equals")) { return proxy == args[0] ? Boolean.TRUE : Boolean.FALSE; } if (method.getName().equals("hashCode")) { return new Integer(System.identityHashCode(proxy)); } if (method.getName().equals("close")) { return null; } try { Object retVal = method.invoke(this.target, args); if ((retVal instanceof Query)) { HibernateTemplate.this.prepareQuery((Query)retVal); } if ((retVal instanceof Criteria)) { HibernateTemplate.this.prepareCriteria((Criteria)retVal); } return retVal; } catch (InvocationTargetException ex) { throw ex.getTargetException(); } } }}
0 0
- HibernateTemplate源码
- HibernateTemplate源码
- HibernateTemplate 源码
- Sping学习之HibernateTemplate源码
- HibernateTemplate
- HibernateTemplate
- hibernateTemplate
- HibernateTemplate
- hibernateTemplate()
- HibernateTemplate
- HibernateTemplate
- HibernateTemplate
- HibernateTemplate
- HibernateTemplate
- HibernateTemplate
- HibernateTemplate
- JDBCTemplate和HibernateTemplate事物源码解析
- 为什么Spring的HibernateTemplate一般情况下不支持数据的惰性加载的源码分析
- Scenario Groups各个状态代表的含义
- 并发调度的可串行性
- 项目安装总结
- 【OpenCV入门指南】第二篇 缩放图像
- 回溯法解01背包问题(C语言版)
- HibernateTemplate 源码
- 动态加载系列文章
- View的绘制流程入门.对郭霖大大文章知识小补充
- 项目中添加震动效果(分分钟哦~)
- 学习笔记之原型模式 prototype
- 电子或通信领域 当前的主流技术及其社会需求调查报告
- 挑战高楼(斐波那契非递归实现)
- css font-family大全
- centos7 安装mariadb(mysql)