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

📄 criterialoader.java

📁 人力资源管理系统主要包括:人员管理、招聘管理、培训管理、奖惩管理和薪金管理五大管理模块。
💻 JAVA
字号:
//$Id: CriteriaLoader.java,v 1.8.2.25 2004/01/29 02:12:20 oneovthafew Exp $package net.sf.hibernate.loader;import java.io.Serializable;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashSet;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import net.sf.hibernate.Criteria;import net.sf.hibernate.FetchMode;import net.sf.hibernate.Hibernate;import net.sf.hibernate.HibernateException;import net.sf.hibernate.LockMode;import net.sf.hibernate.MappingException;import net.sf.hibernate.QueryException;import net.sf.hibernate.dialect.Dialect;import net.sf.hibernate.engine.QueryParameters;import net.sf.hibernate.engine.RowSelection;import net.sf.hibernate.engine.SessionFactoryImplementor;import net.sf.hibernate.engine.SessionImplementor;import net.sf.hibernate.engine.TypedValue;import net.sf.hibernate.expression.Order;import net.sf.hibernate.impl.CriteriaImpl;import net.sf.hibernate.persister.OuterJoinLoadable;import net.sf.hibernate.persister.Queryable;import net.sf.hibernate.sql.ForUpdateFragment;import net.sf.hibernate.sql.JoinFragment;import net.sf.hibernate.type.AssociationType;import net.sf.hibernate.type.Type;import net.sf.hibernate.util.ArrayHelper;//TODO: this class depends directly upon CriteriaImpl, in the impl package ... add a CriteriaImplementor interface/** * A <tt>Loader</tt> for <tt>Criteria</tt> queries. Note that criteria queries are * more like multi-object <tt>load()</tt>s than like HQL queries. *  * @author Gavin King */public class CriteriaLoader extends AbstractEntityLoader {		private CriteriaImpl criteria;	private Set querySpaces = new HashSet();	private final List aliases = new ArrayList();	private final String[] aliasArray;	private Type[] resultTypes;	public CriteriaLoader(OuterJoinLoadable persister, SessionFactoryImplementor factory, CriteriaImpl criteria) throws HibernateException {		super(persister, factory);		this.criteria = criteria;				addAllToPropertySpaces( persister.getPropertySpaces() );		resultTypes = new Type[1];		resultTypes[0] = Hibernate.entity( persister.getMappedClass() );		StringBuffer condition = new StringBuffer(30);		Iterator iter = criteria.iterateExpressionEntries();		if ( !iter.hasNext() ) condition.append("1=1"); //TODO: fix this ugliness		while ( iter.hasNext() ) {			CriteriaImpl.CriterionEntry ee = (CriteriaImpl.CriterionEntry) iter.next();			String sqlString = ee.getCriterion().toSqlString(				factory, 				criteria.getPersistentClass( ee.getAlias() ), 				ee.getAlias(),				criteria.getAliasClasses()			);			condition.append(sqlString);			if ( iter.hasNext() ) condition.append(" and ");		}				StringBuffer orderBy = new StringBuffer(30);		iter = criteria.iterateOrderings();		while ( iter.hasNext() ) {			Order ord = (Order) iter.next();			orderBy.append( ord.toSqlString( factory, criteria.getCriteriaClass(), getAlias() ) );			if ( iter.hasNext() ) orderBy.append(", ");		}				renderStatement( condition.toString(), orderBy.toString(), factory );				postInstantiate();				aliasArray = (String[]) aliases.toArray(ArrayHelper.EMPTY_STRING_ARRAY);	}		public List list(SessionImplementor session) throws HibernateException, SQLException {		List values = new ArrayList();		List types = new ArrayList();		Iterator iter = criteria.iterateExpressionEntries();		while ( iter.hasNext() ) {			CriteriaImpl.CriterionEntry ce = (CriteriaImpl.CriterionEntry) iter.next();			TypedValue[] tv = ce.getCriterion().getTypedValues( 				session.getFactory(), 				criteria.getCriteriaClass( ce.getAlias() ),				criteria.getAliasClasses()			);			for ( int i=0; i<tv.length; i++ ) {				values.add( tv[i].getValue() );				types.add( tv[i].getType() );			}		}		Object[] valueArray = values.toArray();		Type[] typeArray = (Type[]) types.toArray(ArrayHelper.EMPTY_TYPE_ARRAY);				RowSelection selection = new RowSelection();		selection.setFirstRow( criteria.getFirstResult() );		selection.setMaxRows( criteria.getMaxResults() );		selection.setTimeout( criteria.getTimeout() );				QueryParameters qp = new QueryParameters(typeArray, valueArray, criteria.getLockModes(), selection);		qp.setCacheable( criteria.getCacheable() );		qp.setCacheRegion( criteria.getCacheRegion() );		return list(session, qp, querySpaces, resultTypes);	}	protected Object getResultColumnOrRow(Object[] row, ResultSet rs, SessionImplementor session)	throws SQLException, HibernateException {		return criteria.getResultTransformer().transformTuple(row, aliasArray);	}	protected int getJoinType(		AssociationType type,		int config,		String path,		String table,		String[] foreignKeyColumns,		SessionFactoryImplementor factory) 		throws MappingException {				if ( criteria.isJoin(path) ) {			return JoinFragment.INNER_JOIN;		}		else {			FetchMode fm = criteria.getFetchMode(path);			if ( fm==null || fm==FetchMode.DEFAULT ) {				return super.getJoinType(type, config, path, table, foreignKeyColumns, factory);			}			else {				return (fm==FetchMode.EAGER) ? JoinFragment.LEFT_OUTER_JOIN : -1;			}		}	}	/**	 * Use the discriminator, to narrow the select to instances	 * of the queried subclass.	 */	protected String getWhereFragment() throws MappingException {		return ( (Queryable) getPersister() ).queryWhereFragment( getAlias(), true, true );	}	protected String generateTableAlias(String className, int n, String path, boolean isLinkTable) {		if (!isLinkTable) {			String userDefinedAlias = criteria.getAlias(path);			if (userDefinedAlias!=null) {				aliases.add(userDefinedAlias); //very dodgy: depends upon the superclass not reordering things!				return userDefinedAlias;			}		}		String generatedAlias = super.generateTableAlias(className, n, path, isLinkTable);		aliases.add(generatedAlias);		return generatedAlias;	}	protected String generateRootAlias(String tableName) {		return Criteria.ROOT_ALIAS;	}		public Set getQuerySpaces() {		return querySpaces;	}	protected void addToPropertySpaces(Serializable space) {		querySpaces.add(space);	}	protected String applyLocks(String sqlSelectString, Map lockModes, Dialect dialect) throws QueryException {		if ( lockModes==null || lockModes.size()==0 ) {			return sqlSelectString;		}		else {			return sqlSelectString + new ForUpdateFragment(lockModes).toFragmentString(dialect);		}	}	protected LockMode[] getLockModes(Map lockModes) {		int size = aliases.size();		LockMode[] lockModesArray = new LockMode[size+1];		LockMode lm = (LockMode) lockModes.get(Criteria.ROOT_ALIAS);		lockModesArray[size] = lm==null ? LockMode.NONE : lm;		for ( int i=0; i<size; i++ ) {			lm = (LockMode) lockModes.get( aliases.get(i) );			lockModesArray[i] = lm==null ? LockMode.NONE : lm;		}		return lockModesArray;	}	protected List getResultList(List results) {		return criteria.getResultTransformer().transformList(results);	}}

⌨️ 快捷键说明

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