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

📄 querytranslatorimpl.java

📁 一个Java持久层类库
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
			JoinSequence join = ( JoinSequence ) me.getValue();			join.setSelector( new JoinSequence.Selector() {				public boolean includeSubclasses(String alias) {					boolean include = returnedTypes.contains( alias ) && !isShallowQuery();					return include;				}			} );			if ( typeMap.containsKey( name ) ) {				ojf.addFragment( join.toJoinFragment( enabledFilters, true ) );			}			else if ( collections.containsKey( name ) ) {				ojf.addFragment( join.toJoinFragment( enabledFilters, true ) );			}			else {				//name from a super query (a bit inelegant that it shows up here)			}		}	}	public final Set getQuerySpaces() {		return querySpaces;	}	/**	 * Is this query called by scroll() or iterate()?	 *	 * @return true if it is, false if it is called by find() or list()	 */	boolean isShallowQuery() {		return shallowQuery;	}	void addQuerySpaces(Serializable[] spaces) {		for ( int i = 0; i < spaces.length; i++ ) {			querySpaces.add( spaces[i] );		}		if ( superQuery != null ) superQuery.addQuerySpaces( spaces );	}	void setDistinct(boolean distinct) {		this.distinct = distinct;	}	boolean isSubquery() {		return superQuery != null;	}	/**	 * Overrides method from Loader	 */	public CollectionPersister[] getCollectionPersisters() {		return collectionPersister == null ? null : new CollectionPersister[] { collectionPersister };	}	protected String[] getCollectionSuffixes() {		return collectionPersister == null ? null : new String[] { "__" };	}	void setCollectionToFetch(String role, String name, String ownerName, String entityName)			throws QueryException {		fetchName = name;		collectionPersister = getCollectionPersister( role );		collectionOwnerName = ownerName;		if ( collectionPersister.getElementType().isEntityType() ) {			addEntityToFetch( entityName );		}	}	protected String[] getSuffixes() {		return suffixes;	}	protected String[] getAliases() {		return names;	}	/**	 * Used for collection filters	 */	private void addFromAssociation(final String elementName, final String collectionRole)			throws QueryException {		//q.addCollection(collectionName, collectionRole);		QueryableCollection persister = getCollectionPersister( collectionRole );		Type collectionElementType = persister.getElementType();		if ( !collectionElementType.isEntityType() ) {			throw new QueryException( "collection of values in filter: " + elementName );		}		String[] keyColumnNames = persister.getKeyColumnNames();		//if (keyColumnNames.length!=1) throw new QueryException("composite-key collection in filter: " + collectionRole);		String collectionName;		JoinSequence join = new JoinSequence( getFactory() );		collectionName = persister.isOneToMany() ?				elementName :				createNameForCollection( collectionRole );		join.setRoot( persister, collectionName );		if ( !persister.isOneToMany() ) {			//many-to-many			addCollection( collectionName, collectionRole );			try {				join.addJoin( ( AssociationType ) persister.getElementType(),						elementName,						JoinFragment.INNER_JOIN,						persister.getElementColumnNames(collectionName) );			}			catch ( MappingException me ) {				throw new QueryException( me );			}		}		join.addCondition( collectionName, keyColumnNames, " = ?" );		//if ( persister.hasWhere() ) join.addCondition( persister.getSQLWhereString(collectionName) );		EntityType elemType = ( EntityType ) collectionElementType;		addFrom( elementName, elemType.getAssociatedEntityName(), join );	}	String getPathAlias(String path) {		return ( String ) pathAliases.get( path );	}	JoinSequence getPathJoin(String path) {		return ( JoinSequence ) pathJoins.get( path );	}	void addPathAliasAndJoin(String path, String alias, JoinSequence joinSequence) {		pathAliases.put( path, alias );		pathJoins.put( path, joinSequence );	}	public List list(SessionImplementor session, QueryParameters queryParameters)			throws HibernateException {		return list( session, queryParameters, getQuerySpaces(), actualReturnTypes );	}	/**	 * Return the query results as an iterator	 */	public Iterator iterate(QueryParameters queryParameters, EventSource session)			throws HibernateException {		boolean stats = session.getFactory().getStatistics().isStatisticsEnabled();		long startTime = 0;		if ( stats ) startTime = System.currentTimeMillis();		try {			PreparedStatement st = prepareQueryStatement( queryParameters, false, session );			ResultSet rs = getResultSet( st, queryParameters.hasAutoDiscoverScalarTypes(), false, queryParameters.getRowSelection(), session );			HolderInstantiator hi = HolderInstantiator.createClassicHolderInstantiator(holderConstructor, queryParameters.getResultTransformer());			Iterator result = new IteratorImpl( rs, st, session, returnTypes, getColumnNames(), hi );			if ( stats ) {				session.getFactory().getStatisticsImplementor().queryExecuted(						"HQL: " + queryString,						0,						System.currentTimeMillis() - startTime					);			}			return result;		}		catch ( SQLException sqle ) {			throw JDBCExceptionHelper.convert( 					getFactory().getSQLExceptionConverter(),					sqle,					"could not execute query using iterate",					getSQLString() 				);		}	}	public int executeUpdate(QueryParameters queryParameters, SessionImplementor session) throws HibernateException {		throw new UnsupportedOperationException( "Not supported!  Use the AST translator...");	}	protected Object getResultColumnOrRow(Object[] row, ResultTransformer transformer, ResultSet rs, SessionImplementor session)			throws SQLException, HibernateException {		row = toResultRow( row );		if ( hasScalars ) {			String[][] scalarColumns = getColumnNames();			int queryCols = returnTypes.length;			if ( holderClass == null && queryCols == 1 ) {				return returnTypes[0].nullSafeGet( rs, scalarColumns[0], session, null );			}			else {				row = new Object[queryCols];				for ( int i = 0; i < queryCols; i++ )					row[i] = returnTypes[i].nullSafeGet( rs, scalarColumns[i], session, null );				return row;			}		}		else if ( holderClass == null ) {			return row.length == 1 ? row[0] : row;		}		else {			return row;		}	}	protected List getResultList(List results, ResultTransformer resultTransformer) throws QueryException {		if ( holderClass != null ) {			for ( int i = 0; i < results.size(); i++ ) {				Object[] row = ( Object[] ) results.get( i );				try {					results.set( i, holderConstructor.newInstance( row ) );				}				catch ( Exception e ) {					throw new QueryException( "could not instantiate: " + holderClass, e );				}			}		}		return results;	}	private Object[] toResultRow(Object[] row) {		if ( selectLength == row.length ) {			return row;		}		else {			Object[] result = new Object[selectLength];			int j = 0;			for ( int i = 0; i < row.length; i++ ) {				if ( includeInSelect[i] ) result[j++] = row[i];			}			return result;		}	}	void setHolderClass(Class clazz) {		holderClass = clazz;	}	protected LockMode[] getLockModes(Map lockModes) {		// unfortunately this stuff can't be cached because		// it is per-invocation, not constant for the		// QueryTranslator instance		HashMap nameLockModes = new HashMap();		if ( lockModes != null ) {			Iterator iter = lockModes.entrySet().iterator();			while ( iter.hasNext() ) {				Map.Entry me = ( Map.Entry ) iter.next();				nameLockModes.put( getAliasName( ( String ) me.getKey() ),						me.getValue() );			}		}		LockMode[] lockModeArray = new LockMode[names.length];		for ( int i = 0; i < names.length; i++ ) {			LockMode lm = ( LockMode ) nameLockModes.get( names[i] );			if ( lm == null ) lm = LockMode.NONE;			lockModeArray[i] = lm;		}		return lockModeArray;	}	protected String applyLocks(String sql, Map lockModes, Dialect dialect) throws QueryException {		// can't cache this stuff either (per-invocation)		final String result;		if ( lockModes == null || lockModes.size() == 0 ) {			result = sql;		}		else {			Map aliasedLockModes = new HashMap();			Iterator iter = lockModes.entrySet().iterator();			while ( iter.hasNext() ) {				Map.Entry me = ( Map.Entry ) iter.next();				aliasedLockModes.put( getAliasName( ( String ) me.getKey() ), me.getValue() );			}			Map keyColumnNames = null;			if ( dialect.forUpdateOfColumns() ) {				keyColumnNames = new HashMap();				for ( int i = 0; i < names.length; i++ ) {					keyColumnNames.put( names[i], persisters[i].getIdentifierColumnNames() );				}			}			result = dialect.applyLocksToSql( sql, aliasedLockModes, keyColumnNames );		}		logQuery( queryString, result );		return result;	}	protected boolean upgradeLocks() {		return true;	}	protected int[] getCollectionOwners() {		return new int[] { collectionOwnerColumn };	}	protected boolean isCompiled() {		return compiled;	}	public String toString() {		return queryString;	}	protected int[] getOwners() {		return owners;	}	protected EntityType[] getOwnerAssociationTypes() {		return ownerAssociationTypes;	}	public Class getHolderClass() {		return holderClass;	}	public Map getEnabledFilters() {		return enabledFilters;	}	public ScrollableResults scroll(final QueryParameters queryParameters,									final SessionImplementor session)			throws HibernateException {		HolderInstantiator hi = HolderInstantiator.createClassicHolderInstantiator(holderConstructor, queryParameters.getResultTransformer());		return scroll( queryParameters, returnTypes, hi, session );	}	public String getQueryIdentifier() {		return queryIdentifier;	}	protected boolean isSubselectLoadingEnabled() {		return hasSubselectLoadableCollections();	}	public void validateScrollability() throws HibernateException {		// This is the legacy behaviour for HQL queries...		if ( getCollectionPersisters() != null ) {			throw new HibernateException( "Cannot scroll queries which initialize collections" );		}	}	public boolean containsCollectionFetches() {		return false;	}	public boolean isManipulationStatement() {		// classic parser does not support bulk manipulation statements		return false;	}	public ParameterTranslations getParameterTranslations() {		return new ParameterTranslations() {			public boolean supportsOrdinalParameterMetadata() {				// classic translator does not support collection of ordinal				// param metadata				return false;			}			public int getOrdinalParameterCount() {				return 0; // not known!			}			public int getOrdinalParameterSqlLocation(int ordinalPosition) {				return 0; // not known!			}			public Type getOrdinalParameterExpectedType(int ordinalPosition) {				return null; // not known!			}			public Set getNamedParameterNames() {				return namedParameters.keySet();			}			public int[] getNamedParameterSqlLocations(String name) {				return getNamedParameterLocs( name );			}			public Type getNamedParameterExpectedType(String name) {				return null; // not known!			}		};	}}

⌨️ 快捷键说明

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