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

📄 abstractentityloader.java

📁 用Java实现的23个常用设计模式源代码
💻 JAVA
字号:
//$Id: AbstractEntityLoader.java,v 1.6.2.17 2003/11/28 02:28:39 maxcsaucdk Exp $package net.sf.hibernate.loader;import java.io.Serializable;import java.util.Iterator;import java.util.List;import net.sf.hibernate.AssertionFailure;import net.sf.hibernate.LockMode;import net.sf.hibernate.MappingException;import net.sf.hibernate.collection.CollectionPersister;import net.sf.hibernate.collection.QueryableCollection;import net.sf.hibernate.engine.SessionFactoryImplementor;import net.sf.hibernate.persister.Loadable;import net.sf.hibernate.sql.JoinFragment;import net.sf.hibernate.sql.Select;import net.sf.hibernate.type.Type;import net.sf.hibernate.util.ArrayHelper;import net.sf.hibernate.util.StringHelper;/** * Abstract superclass for entity loaders that use outer joins *  * @see CriteriaLoader * @see EntityLoader * @author Gavin King */public abstract class AbstractEntityLoader extends OuterJoinLoader {	private final Loadable persister;	private CollectionPersister collectionPersister;	private int collectionOwner;	private String alias;		public AbstractEntityLoader(Loadable persister, SessionFactoryImplementor factory) {		super( factory.getDialect() );		this.persister = persister;		alias = generateRootAlias( persister.getClassName() );			}		protected final void renderStatement(String condition, SessionFactoryImplementor factory) throws MappingException {		renderStatement(condition, StringHelper.EMPTY_STRING, factory);	}		protected final void addAllToPropertySpaces(Serializable[] spaces) {		for ( int i=0; i<spaces.length; i++ ) addToPropertySpaces( spaces[i] );	}		protected void addToPropertySpaces(Serializable space) {		throw new AssertionFailure("only criteria queries need to autoflush");	}		private int toOwner(OuterJoinableAssociation oj, int joins, boolean dontIgnore) {		if (dontIgnore) {			return (oj.owner==-1) ? joins : oj.owner; //TODO: UGLY AS SIN!		}		else {			return -1;		}	}		protected final void renderStatement(String condition, String orderBy, SessionFactoryImplementor factory) throws MappingException {		List associations = walkTree(persister, alias, factory);				int joins=countClassPersisters(associations);		collectionOwner = -1; //if no collection found		classPersisters = new Loadable[joins+1];		owners = new int[joins+1];		lockModeArray = createLockModeArray(joins+1, LockMode.NONE);		int i=0;		Iterator iter = associations.iterator();		while ( iter.hasNext() ) {			OuterJoinableAssociation oj = (OuterJoinableAssociation) iter.next(); 			Object subpersister = oj.joinable;			if (subpersister instanceof Loadable) {				classPersisters[i] = (Loadable) subpersister;				owners[i] = toOwner(oj, joins, oj.isOneToOne);				if (oj.joinType==JoinFragment.INNER_JOIN) addAllToPropertySpaces( classPersisters[i].getPropertySpaces() );				i++;			}			else {				QueryableCollection collPersister = (QueryableCollection) subpersister;				if (oj.joinType==JoinFragment.LEFT_OUTER_JOIN) { //supress initialization of collections with a where condition!					collectionPersister = collPersister;					collectionOwner = toOwner(oj, joins, true);				}				else {					addToPropertySpaces( collPersister.getCollectionSpace() );				}				if ( collPersister.isOneToMany() ) {					classPersisters[i++] = collPersister.getElementPersister();				}			}		}		classPersisters[joins] = persister;		owners[joins] = -1;				if ( ArrayHelper.isAllNegative(owners) ) owners = null;		suffixes = generateSuffixes(joins+1);				JoinFragment ojf = mergeOuterJoins(associations);		sql = new Select()			.setSelectClause(				persister.joinSelectFragment( alias, suffixes[joins] ) +				selectString(associations, factory)			)			.setFromClause( 				persister.fromTableFragment(alias) +				persister.fromJoinFragment(alias, true, true)			)			.setWhereClause(condition)			.setOuterJoins(				ojf.toFromFragmentString(),				ojf.toWhereFragmentString() + getWhereFragment()			)			.setOrderByClause(orderBy)			.toStatementString();			}		/**	 * Don't bother with the discriminator, unless overridded by subclass	 */	protected String getWhereFragment() throws MappingException {		return persister.whereJoinFragment(alias, true, true);	}	protected final Loadable getPersister() {		return persister;	}	protected final void setAlias(String alias) {		this.alias = alias;	}	protected final String getAlias() {		return alias;	}	protected final CollectionPersister getCollectionPersister() {		return collectionPersister;	}	protected final int getCollectionOwner() {		return collectionOwner;	}	protected boolean isJoinedFetchEnabled(		Type type,		boolean mappingDefault,		String path,		String table,		String[] foreignKeyColumns) {				return mappingDefault;	}	public String toString() {		return getClass().getName() + " for " + getPersister().getClassName();	}}

⌨️ 快捷键说明

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