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

📄 sqlcustomquery.java

📁 一个Java持久层类库
💻 JAVA
字号:
//$Id: SQLCustomQuery.java 10018 2006-06-15 05:21:06Z steve.ebersole@jboss.com $package org.hibernate.loader.custom.sql;import java.util.ArrayList;import java.util.Collection;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;import java.util.HashMap;import org.hibernate.HibernateException;import org.hibernate.engine.query.sql.NativeSQLQueryReturn;import org.hibernate.engine.SessionFactoryImplementor;import org.hibernate.loader.custom.CustomQuery;import org.hibernate.persister.collection.SQLLoadableCollection;import org.hibernate.persister.entity.SQLLoadable;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * Implements Hibernate's built-in support for native SQL queries. * <p/> * This support is built on top of the notion of "custom queries"... *  * @author Gavin King * @author Max Andersen * @author Steve Ebersole */public class SQLCustomQuery implements CustomQuery {	public static final Logger log = LoggerFactory.getLogger( SQLCustomQuery.class );	private final String sql;	private final Set querySpaces = new HashSet();	private final Map namedParameterBindPoints = new HashMap();	private final List customQueryReturns = new ArrayList();	public String getSQL() {		return sql;	}	public Set getQuerySpaces() {		return querySpaces;	}	public Map getNamedParameterBindPoints() {		return namedParameterBindPoints;	}	public List getCustomQueryReturns() {		return customQueryReturns;	}	public SQLCustomQuery(			final String sqlQuery,			final NativeSQLQueryReturn[] queryReturns,			final Collection additionalQuerySpaces,			final SessionFactoryImplementor factory) throws HibernateException {		log.trace( "starting processing of sql query [" + sqlQuery + "]" );		SQLQueryReturnProcessor processor = new SQLQueryReturnProcessor(queryReturns, factory);		SQLQueryReturnProcessor.ResultAliasContext aliasContext = processor.process();//		Map[] propertyResultMaps =  (Map[]) processor.getPropertyResults().toArray( new Map[0] );//		Map[] collectionResultMaps =  (Map[]) processor.getCollectionPropertyResults().toArray( new Map[0] );////		List collectionSuffixes = new ArrayList();//		List collectionOwnerAliases = processor.getCollectionOwnerAliases();//		List collectionPersisters = processor.getCollectionPersisters();//		int size = collectionPersisters.size();//		if (size!=0) {//			collectionOwners = new int[size];//			collectionRoles = new String[size];//			//collectionDescriptors = new CollectionAliases[size];//			for ( int i=0; i<size; i++ ) {//				CollectionPersister collectionPersister = (CollectionPersister) collectionPersisters.get(i);//				collectionRoles[i] = ( collectionPersister ).getRole();//				collectionOwners[i] = processor.getAliases().indexOf( collectionOwnerAliases.get(i) );//				String suffix = i + "__";//				collectionSuffixes.add(suffix);//				//collectionDescriptors[i] = new GeneratedCollectionAliases( collectionResultMaps[i], collectionPersister, suffix );//			}//		}//		else {//			collectionRoles = null;//			//collectionDescriptors = null;//			collectionOwners = null;//		}////		String[] aliases = ArrayHelper.toStringArray( processor.getAliases() );//		String[] collAliases = ArrayHelper.toStringArray( processor.getCollectionAliases() );//		String[] collSuffixes = ArrayHelper.toStringArray(collectionSuffixes);////		SQLLoadable[] entityPersisters = (SQLLoadable[]) processor.getPersisters().toArray( new SQLLoadable[0] );//		SQLLoadableCollection[] collPersisters = (SQLLoadableCollection[]) collectionPersisters.toArray( new SQLLoadableCollection[0] );//        lockModes = (LockMode[]) processor.getLockModes().toArray( new LockMode[0] );////        scalarColumnAliases = ArrayHelper.toStringArray( processor.getScalarColumnAliases() );//		scalarTypes = ArrayHelper.toTypeArray( processor.getScalarTypes() );////		// need to match the "sequence" of what we return. scalar first, entity last.//		returnAliases = ArrayHelper.join(scalarColumnAliases, aliases);////		String[] suffixes = BasicLoader.generateSuffixes(entityPersisters.length);		SQLQueryParser parser = new SQLQueryParser( sqlQuery, new ParserContext( aliasContext ) );		this.sql = parser.process();		this.namedParameterBindPoints.putAll( parser.getNamedParameters() );//		SQLQueryParser parser = new SQLQueryParser(//				sqlQuery,//				processor.getAlias2Persister(),//				processor.getAlias2Return(),//				aliases,//				collAliases,//				collPersisters,//				suffixes,//				collSuffixes//		);////		sql = parser.process();////		namedParameterBindPoints = parser.getNamedParameters();		customQueryReturns.addAll( processor.generateCustomReturns( parser.queryHasAliases() ) );//		// Populate entityNames, entityDescrptors and querySpaces//		entityNames = new String[entityPersisters.length];//		entityDescriptors = new EntityAliases[entityPersisters.length];//		for (int i = 0; i < entityPersisters.length; i++) {//			SQLLoadable persister = entityPersisters[i];//			//alias2Persister.put( aliases[i], persister );//			//TODO: Does not consider any other tables referenced in the query//			ArrayHelper.addAll( querySpaces, persister.getQuerySpaces() );//			entityNames[i] = persister.getEntityName();//			if ( parser.queryHasAliases() ) {//				entityDescriptors[i] = new DefaultEntityAliases(//						propertyResultMaps[i],//						entityPersisters[i],//						suffixes[i]//					);//			}//			else {//				entityDescriptors[i] = new ColumnEntityAliases(//						propertyResultMaps[i],//						entityPersisters[i],//						suffixes[i]//					);//			}//		}		if ( additionalQuerySpaces != null ) {			querySpaces.addAll( additionalQuerySpaces );		}//		if (size!=0) {//			collectionDescriptors = new CollectionAliases[size];//			for ( int i=0; i<size; i++ ) {//				CollectionPersister collectionPersister = (CollectionPersister) collectionPersisters.get(i);//				String suffix = i + "__";//				if( parser.queryHasAliases() ) {//					collectionDescriptors[i] = new GeneratedCollectionAliases( collectionResultMaps[i], collectionPersister, suffix );//				} else {//					collectionDescriptors[i] = new ColumnCollectionAliases( collectionResultMaps[i], (SQLLoadableCollection) collectionPersister );//				}//			}//		}//		else {//			collectionDescriptors = null;//		}//////		// Resolve owners//		Map alias2OwnerAlias = processor.getAlias2OwnerAlias();//		int[] ownersArray = new int[entityPersisters.length];//		for ( int j=0; j < aliases.length; j++ ) {//			String ownerAlias = (String) alias2OwnerAlias.get( aliases[j] );//			if ( StringHelper.isNotEmpty(ownerAlias) ) {//				ownersArray[j] =  processor.getAliases().indexOf( ownerAlias );//			}//			else {//				ownersArray[j] = -1;//			}//		}//		if ( ArrayHelper.isAllNegative(ownersArray) ) {//			ownersArray = null;//		}//		this.entityOwners = ownersArray;	}	private static class ParserContext implements SQLQueryParser.ParserContext {		private final SQLQueryReturnProcessor.ResultAliasContext aliasContext;		public ParserContext(SQLQueryReturnProcessor.ResultAliasContext aliasContext) {			this.aliasContext = aliasContext;		}		public boolean isEntityAlias(String alias) {			return getEntityPersisterByAlias( alias ) != null;		}		public SQLLoadable getEntityPersisterByAlias(String alias) {			return aliasContext.getEntityPersister( alias );		}		public String getEntitySuffixByAlias(String alias) {			return aliasContext.getEntitySuffix( alias );		}		public boolean isCollectionAlias(String alias) {			return getCollectionPersisterByAlias( alias ) != null;		}		public SQLLoadableCollection getCollectionPersisterByAlias(String alias) {			return aliasContext.getCollectionPersister( alias );		}		public String getCollectionSuffixByAlias(String alias) {			return aliasContext.getCollectionSuffix( alias );		}		public Map getPropertyResultsMapByAlias(String alias) {			return aliasContext.getPropertyResultsMap( alias );		}	}}

⌨️ 快捷键说明

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