⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 criteriaimpl.java

📁 人力资源管理系统主要包括:人员管理、招聘管理、培训管理、奖惩管理和薪金管理五大管理模块。
💻 JAVA
字号:
//$Id: CriteriaImpl.java,v 1.4.2.18 2004/01/29 02:12:18 oneovthafew Exp $package net.sf.hibernate.impl;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import net.sf.hibernate.Criteria;import net.sf.hibernate.FetchMode;import net.sf.hibernate.HibernateException;import net.sf.hibernate.LockMode;import net.sf.hibernate.QueryException;import net.sf.hibernate.engine.SessionFactoryImplementor;import net.sf.hibernate.expression.Criterion;import net.sf.hibernate.expression.Order;import net.sf.hibernate.persister.PropertyMapping;import net.sf.hibernate.transform.ResultTransformer;import net.sf.hibernate.transform.AliasToEntityMapResultTransformer;import net.sf.hibernate.transform.RootEntityResultTransformer;import net.sf.hibernate.type.AssociationType;import net.sf.hibernate.type.Type;import net.sf.hibernate.util.StringHelper;/** * Implementation of the <tt>Criteria</tt> interface * @author Gavin King */public class CriteriaImpl implements Criteria {		private List criteria = new ArrayList();	private List orderings = new ArrayList();	private Map fetchModes = new HashMap();	private Map associationPathByAlias = new HashMap();	private Map aliasByAssociationPath = new HashMap();	private Map classByAlias = new HashMap();	private Map lockModes = new HashMap();	private Integer maxResults;	private Integer firstResult;	private Integer timeout;	private Class persistentClass;	private SessionImpl session;	private ResultTransformer resultTransformer = new RootEntityResultTransformer();	private boolean cacheable;	private String cacheRegion;	private int counter=0;		private String generateAlias() {		return "x" + counter++ + StringHelper.UNDERSCORE;	}	public final class Subcriteria implements Criteria {				private String rootAlias;		private String rootPath;				private Subcriteria(String rootAlias, String rootPath) {			this.rootAlias = rootAlias;			this.rootPath = rootPath;		}				public Criteria add(Criterion expression) {			CriteriaImpl.this.add(rootAlias, expression);			return this;		}		public Criteria createAlias(String associationPath, String alias)			throws HibernateException {			CriteriaImpl.this.createAlias(rootAlias, associationPath, alias);			return this;		}		public Criteria addOrder(Order order) {			throw new UnsupportedOperationException("subcriteria cannot be ordered");		}		public Criteria createCriteria(String associationPath)			throws HibernateException {			return CriteriaImpl.this.createCriteriaAt(rootAlias, associationPath);		}		public List list() throws HibernateException {			return CriteriaImpl.this.list();		}		public Object uniqueResult() throws HibernateException {			return CriteriaImpl.this.uniqueResult();		}		public Criteria setFetchMode(String associationPath, FetchMode mode)			throws HibernateException {			CriteriaImpl.this.setFetchMode( StringHelper.qualify(rootPath, associationPath), mode);			return this;		}		public Criteria setFirstResult(int firstResult) {			CriteriaImpl.this.setFirstResult(firstResult);			return this;		}		public Criteria setMaxResults(int maxResults) {			CriteriaImpl.this.setMaxResults(maxResults);			return this;		}		public Criteria setTimeout(int timeout) {			CriteriaImpl.this.setTimeout(timeout);			return this;		}		public Class getCriteriaClass() {			return CriteriaImpl.this.getCriteriaClass(rootAlias);		}		public Class getCriteriaClass(String alias) {			return CriteriaImpl.this.getCriteriaClass(alias);		}		public Criteria createCriteria(String associationPath, String alias)			throws HibernateException {			return CriteriaImpl.this.createCriteriaAt(rootAlias, associationPath, alias);		}		public Criteria returnMaps() {			CriteriaImpl.this.returnMaps();			return this;		}		public Criteria returnRootEntities() {			CriteriaImpl.this.returnRootEntities();			return this;		}		public Criteria setLockMode(LockMode lockMode) {			CriteriaImpl.this.setLockMode(rootAlias, lockMode);			return this;		}		public Criteria setLockMode(String alias, LockMode lockMode) {			CriteriaImpl.this.setLockMode(alias, lockMode);			return this;		}		public Criteria setResultTransformer(ResultTransformer resultProcessor) {			CriteriaImpl.this.setResultTransformer(resultProcessor);			return this;		}		public Criteria setCacheable(boolean cacheable) {			CriteriaImpl.this.setCacheable(cacheable);			return this;		}		public Criteria setCacheRegion(String cacheRegion) {			CriteriaImpl.this.setCacheRegion(cacheRegion);			return this;		}	}	public Criteria setMaxResults(int maxResults) {		this.maxResults = new Integer(maxResults);		return this;	}	public Criteria setFirstResult(int firstResult) {		this.firstResult = new Integer(firstResult);		return this;	}	public Criteria setTimeout(int timeout) {		this.timeout = new Integer(timeout);		return this;	}		public Criteria add(Criterion expression) {		add(Criteria.ROOT_ALIAS, expression);		return this;	}		public Integer getMaxResults() {		return maxResults;	}	public Integer getFirstResult() {		return firstResult;	}	public Integer getTimeout() {		return timeout;	}		public CriteriaImpl(Class persistentClass, SessionImpl session) {		this.persistentClass = persistentClass;		this.session = session;		this.classByAlias.put(Criteria.ROOT_ALIAS, persistentClass);		this.cacheable = false;	}		/** 	 * Copy all the internal attributes of the given CrtieriaImpl	 * except alter the root persistent class type to be the given one.	 */	public CriteriaImpl(Class persistentClass, CriteriaImpl original) {		this.persistentClass = persistentClass;		this.classByAlias = original.classByAlias;		this.classByAlias.put(Criteria.ROOT_ALIAS, persistentClass);				this.criteria = original.criteria;		this.orderings = original.orderings;		this.fetchModes = original.fetchModes;		this.associationPathByAlias = original.associationPathByAlias;		this.aliasByAssociationPath = original.aliasByAssociationPath;		this.lockModes = original.lockModes;		this.maxResults = original.maxResults;		this.firstResult = original.firstResult;		this.timeout = original.timeout;		this.session = original.session;		this.resultTransformer = original.resultTransformer;		this.counter = original.counter;		this.cacheable = original.cacheable;		this.cacheRegion = original.cacheRegion;	}		public List list() throws HibernateException {		return session.find(this);	}		public Iterator iterateExpressionEntries() {		return criteria.iterator();	}		public Iterator iterateOrderings() {		return orderings.iterator();	}		public Class getPersistentClass(String alias) {		return (Class) classByAlias.get(alias);	}		public Map getAliasClasses() {		return classByAlias;	}		public String toString() {		return criteria.toString();	}	public Criteria addOrder(Order ordering) {		orderings.add(ordering);		return this;	}		public FetchMode getFetchMode(String path) {		return (FetchMode) fetchModes.get(path);	}		public Criteria setFetchMode(String associationPath, FetchMode mode) {		fetchModes.put(associationPath, mode);		return this;	}	public Criteria createAlias(String associationPath, String alias) throws HibernateException {		createAlias(ROOT_ALIAS, associationPath, alias);		return this;	}		private void createAlias(String rootAlias, String associationPath, String alias) throws HibernateException {				String testAlias = StringHelper.root(associationPath);		if ( classByAlias.containsKey(testAlias) ) {			rootAlias = testAlias;			associationPath = associationPath.substring( rootAlias.length() + 1 );		}				String rootPath = (String) associationPathByAlias.get(rootAlias);		String wholeAssociationPath;		if (rootPath==null) {			if ( !ROOT_ALIAS.equals(rootAlias) ) throw new HibernateException("unknown alias: " + rootAlias);			wholeAssociationPath = associationPath;		}		else {			wholeAssociationPath = StringHelper.qualify(rootPath, associationPath);		}				associationPathByAlias.put(alias, wholeAssociationPath);		aliasByAssociationPath.put(wholeAssociationPath, alias);		classByAlias.put( alias, getClassForPath(rootAlias, associationPath) );	}		public boolean isJoin(String path) {		return aliasByAssociationPath.containsKey(path);	}		public String getAlias(String associationPath) {		return (String) aliasByAssociationPath.get(associationPath);	}	public Criteria add(String alias, Criterion expression) {		criteria.add( new CriterionEntry(expression, alias) );		return this;	}		/*private Type getType(PropertyMapping pm, String associationPath, SessionFactoryImplementor factory) 	throws HibernateException {		//whoa! reuseable code buried all the way down here!		String[] pathComponents = StringHelper.split(".", associationPath);		StringBuffer subpath = new StringBuffer( associationPath.length() );		Type type = null;		for ( int i=0; i<pathComponents.length; i++ ) {			subpath.append( pathComponents[i] );			type = pm.toType( subpath.toString() );			if ( i<pathComponents.length-1 && type.isAssociationType() ) {				return getType( 					( (AssociationType) type ).getJoinable(factory), 					associationPath.substring( subpath.length()+1 ), 					factory 				);			}			subpath.append(".");		}		return type;	}*/		public Class getClassForPath(String rootAlias, String associationPath) throws HibernateException {		SessionFactoryImplementor factory = session.getFactory();		Class clazz = (Class) classByAlias.get(rootAlias);		//Type type = getType( (Joinable) factory.getPersister(clazz), associationPath, factory );		Type type = ( (PropertyMapping) factory.getPersister(clazz) ).toType(associationPath);		if ( !type.isAssociationType() ) throw new QueryException("not an association path: " + associationPath);		return ( (AssociationType) type ).getAssociatedClass(factory);	}		public static final class CriterionEntry {		private final Criterion criterion;		private final String alias;		private CriterionEntry(Criterion criterion, String alias) {			this.alias = alias;			this.criterion = criterion;		}		public Criterion getCriterion() {			return criterion;		}		public String getAlias() {			return alias;		}	}		public Criteria createCriteria(String associationPath) throws HibernateException {		return createCriteriaAt( ROOT_ALIAS, associationPath );	}		private Criteria createCriteriaAt(String rootAlias, String associationPath)  throws HibernateException {		return createCriteriaAt( rootAlias, associationPath, generateAlias() );	}	private Criteria createCriteriaAt(String rootAlias, String associationPath, String alias)  throws HibernateException {		String testAlias = StringHelper.root(associationPath);		if ( classByAlias.containsKey(testAlias) ) {			rootAlias = testAlias;			associationPath = associationPath.substring( rootAlias.length() + 1 );		}		createAlias(rootAlias, associationPath, alias);		return new Subcriteria(alias, associationPath);	}	public Object uniqueResult() throws HibernateException {		return AbstractQueryImpl.uniqueElement( list() );	}	public Class getCriteriaClass() {		return persistentClass;	}	public Class getCriteriaClass(String alias) {		return (Class) classByAlias.get(alias);	}	public Criteria createCriteria(String associationPath, String alias)		throws HibernateException {		return createCriteriaAt(ROOT_ALIAS, associationPath, alias);	}	public Criteria returnMaps() {		setResultTransformer( new AliasToEntityMapResultTransformer() );		return this;	}	public Criteria returnRootEntities() {		setResultTransformer( new RootEntityResultTransformer() );		return this;	}	public Criteria setLockMode(LockMode lockMode) {		return setLockMode(Criteria.ROOT_ALIAS, lockMode);	}	public Criteria setLockMode(String alias, LockMode lockMode) {		lockModes.put(alias, lockMode);		return this;	}		public Map getLockModes() {		return lockModes;	}	public ResultTransformer getResultTransformer() {		return resultTransformer;	}	public Criteria setResultTransformer(ResultTransformer tupleMapper) {		this.resultTransformer = tupleMapper;		return this;	}	public boolean getCacheable() {		return this.cacheable;	}	public String getCacheRegion() {		return this.cacheRegion;	}	public Criteria setCacheable(boolean cacheable) {		this.cacheable = cacheable;		return this;	}	public Criteria setCacheRegion(String cacheRegion) {		this.cacheRegion = cacheRegion.trim();		return this;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -