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

📄 criterialoader.java

📁 介绍了hibernate的入门有一些基本常用的事例
💻 JAVA
字号:
//$Id: CriteriaLoader.java,v 1.3 2005/03/21 17:29:56 oneovthafew Exp $package org.hibernate.loader.criteria;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Set;import org.hibernate.Criteria;import org.hibernate.FetchMode;import org.hibernate.Hibernate;import org.hibernate.HibernateException;import org.hibernate.LockMode;import org.hibernate.MappingException;import org.hibernate.QueryException;import org.hibernate.ScrollMode;import org.hibernate.ScrollableResults;import org.hibernate.dialect.Dialect;import org.hibernate.engine.QueryParameters;import org.hibernate.engine.SessionFactoryImplementor;import org.hibernate.engine.SessionImplementor;import org.hibernate.impl.CriteriaImpl;import org.hibernate.loader.AbstractEntityLoader;import org.hibernate.persister.entity.Joinable;import org.hibernate.persister.entity.Loadable;import org.hibernate.persister.entity.OuterJoinLoadable;import org.hibernate.persister.entity.Queryable;import org.hibernate.sql.ForUpdateFragment;import org.hibernate.sql.JoinFragment;import org.hibernate.type.AssociationType;import org.hibernate.type.Type;import org.hibernate.util.ArrayHelper;/** * 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 {	//TODO: this class depends directly upon CriteriaImpl, 	//      in the impl package ... add a CriteriaImplementor 	//      interface	//NOTE: unlike all other Loaders, this one is NOT	//      multithreaded, or cacheable!!	private final CriteriaQueryTranslator translator;	private final Set querySpaces;	private final Type[] resultTypes;	//the user visible aliases, which are unknown to the superclass,	//these are not the actual "physical" SQL aliases	private final String[] userAliases;	private final List userAliasList = new ArrayList();	public CriteriaLoader(			final OuterJoinLoadable persister, 			final SessionFactoryImplementor factory, 			final CriteriaImpl criteria, 			final String rootEntityName,			final Map enabledFilters)	throws HibernateException {		super(persister, factory, enabledFilters);		translator = new CriteriaQueryTranslator(				factory, 				criteria, 				rootEntityName, 				CriteriaQueryTranslator.ROOT_SQL_ALIAS		);		querySpaces = translator.getQuerySpaces();		if ( translator.hasProjection() ) {			resultTypes = translator.getProjectedTypes();						initProjection( 					translator.getSelect(), 					translator.getWhereCondition(), 					translator.getOrderBy(),					translator.getGroupBy(),					LockMode.NONE 			);		}		else {			resultTypes = new Type[] { Hibernate.entity( persister.getEntityName() ) };			initAll( translator.getWhereCondition(), translator.getOrderBy(), LockMode.NONE );		}				userAliasList.add( criteria.getAlias() ); //root entity comes *last*		userAliases = ArrayHelper.toStringArray(userAliasList);		postInstantiate();	}		public ScrollableResults scroll(SessionImplementor session, ScrollMode scrollMode) 	throws HibernateException {		QueryParameters qp = translator.getQueryParameters();		qp.setScrollMode(scrollMode);		return scroll(qp, resultTypes, null, session);	}	public List list(SessionImplementor session) 	throws HibernateException {		return list( session, translator.getQueryParameters(), querySpaces, resultTypes );	}	protected Object getResultColumnOrRow(Object[] row, ResultSet rs, SessionImplementor session)	throws SQLException, HibernateException {		final Object[] result;		final String[] aliases;		if ( translator.hasProjection() ) {			Type[] types = translator.getProjectedTypes();			result = new Object[types.length];			String[] columnAliases = translator.getProjectedColumnAliases();			for ( int i=0; i<result.length; i++ ) {				result[i] = types[i].nullSafeGet(rs, columnAliases[i], session, null);			}			aliases = translator.getProjectedAliases();		}		else {			result = row;			aliases = userAliases;		}		return translator.getRootCriteria().getResultTransformer().transformTuple(result, aliases);	}	protected int getJoinType(			AssociationType type, 			FetchMode config, 			String path, 			Set visitedAssociations,			String lhsTable,			String[] lhsColumns,			boolean nullable,			int currentDepth)	throws MappingException {		if ( translator.isJoin(path) ) {			return JoinFragment.INNER_JOIN;		}		else {			FetchMode fm = translator.getRootCriteria()				.getFetchMode(path);			if ( isDefaultFetchMode(fm) ) {				return super.getJoinType(						type, 						config, 						path, 						visitedAssociations, 						lhsTable, 						lhsColumns, 						nullable,						currentDepth				);			}			else {				if ( fm==FetchMode.JOIN ) {					return getJoinType(nullable, currentDepth);				}				else {					return -1;				}			}		}	}		private static boolean isDefaultFetchMode(FetchMode fm) {		return fm==null || fm==FetchMode.DEFAULT;	}	/**	 * Use the discriminator, to narrow the select to instances	 * of the queried subclass, also applying any filters.	 */	protected String getWhereFragment() throws MappingException {		return super.getWhereFragment() +			( (Queryable) getPersister() ).filterFragment( getAlias(), getEnabledFilters() );	}		protected String generateTableAlias(int n, String path, Joinable joinable) {		if ( joinable.consumesAlias() ) {			final Criteria subcriteria = translator.getCriteria(path);			String sqlAlias = subcriteria==null ? null : translator.getSQLAlias(subcriteria);			if (sqlAlias!=null) {				userAliasList.add( subcriteria.getAlias() ); //alias may be null				return sqlAlias; //EARLY EXIT			}			else {				userAliasList.add(null);			}		}		return super.generateTableAlias( n + translator.getSQLAliasCount(), path, joinable );	}	protected String generateRootAlias(String tableName) {		return CriteriaQueryTranslator.ROOT_SQL_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 {			Map keyColumnNames = null;			Loadable[] persisters = getEntityPersisters();			String[] entityAliases = getAliases();			if ( dialect.forUpdateOfColumns() ) {				keyColumnNames = new HashMap();				for ( int i=0; i<entityAliases.length; i++ ) {					keyColumnNames.put( entityAliases[i], persisters[i].getIdentifierColumnNames() );				}			}			return sqlSelectString + 				new ForUpdateFragment(dialect, lockModes, keyColumnNames).toFragmentString();		}	}	protected LockMode[] getLockModes(Map lockModes) {		final String[] entityAliases = getAliases();		if (entityAliases==null) return null;		final int size = entityAliases.length;		LockMode[] lockModesArray = new LockMode[size];		for ( int i=0; i<size; i++ ) {			LockMode lockMode = (LockMode) lockModes.get( entityAliases[i] );			lockModesArray[i] = lockMode==null ? LockMode.NONE : lockMode;		}		return lockModesArray;	}	protected boolean isSubselectLoadingEnabled() {		return hasSubselectLoadableCollections();	}		protected List getResultList(List results) {		return translator.getRootCriteria().getResultTransformer().transformList(results);	}	public String getComment() {		return "criteria query";	}}

⌨️ 快捷键说明

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