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

📄 persistentclass.java

📁 一个Java持久层类库
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//$Id: PersistentClass.java 10927 2006-12-05 18:48:50Z steve.ebersole@jboss.com $package org.hibernate.mapping;import java.io.Serializable;import java.util.*;import java.util.Set;import org.hibernate.MappingException;import org.hibernate.EntityMode;import org.hibernate.dialect.Dialect;import org.hibernate.engine.Mapping;import org.hibernate.engine.ExecuteUpdateResultCheckStyle;import org.hibernate.sql.Alias;import org.hibernate.util.EmptyIterator;import org.hibernate.util.JoinedIterator;import org.hibernate.util.ReflectHelper;import org.hibernate.util.SingletonIterator;import org.hibernate.util.StringHelper;/** * Mapping for an entity. * * @author Gavin King */public abstract class PersistentClass implements Serializable, Filterable, MetaAttributable {	private static final Alias PK_ALIAS = new Alias(15, "PK");	public static final String NULL_DISCRIMINATOR_MAPPING = "null";	public static final String NOT_NULL_DISCRIMINATOR_MAPPING = "not null";	private String entityName;	private String className;	private String proxyInterfaceName;		private String nodeName;	private String discriminatorValue;	private boolean lazy;	private ArrayList properties = new ArrayList();	private final ArrayList subclasses = new ArrayList();	private final ArrayList subclassProperties = new ArrayList();	private final ArrayList subclassTables = new ArrayList();	private boolean dynamicInsert;	private boolean dynamicUpdate;	private int batchSize=-1;	private boolean selectBeforeUpdate;	private java.util.Map metaAttributes;	private ArrayList joins = new ArrayList();	private final ArrayList subclassJoins = new ArrayList();	private final java.util.Map filters = new HashMap();	protected final java.util.Set synchronizedTables = new HashSet();	private String loaderName;	private Boolean isAbstract;	private boolean hasSubselectLoadableCollections;	private Component identifierMapper;	// Custom SQL	private String customSQLInsert;	private boolean customInsertCallable;	private ExecuteUpdateResultCheckStyle insertCheckStyle;	private String customSQLUpdate;	private boolean customUpdateCallable;	private ExecuteUpdateResultCheckStyle updateCheckStyle;	private String customSQLDelete;	private boolean customDeleteCallable;	private ExecuteUpdateResultCheckStyle deleteCheckStyle;	private String temporaryIdTableName;	private String temporaryIdTableDDL;	private java.util.Map tuplizerImpls;	protected int optimisticLockMode;	public String getClassName() {		return className;	}	public void setClassName(String className) {		this.className = className==null ? null : className.intern();	}	public String getProxyInterfaceName() {		return proxyInterfaceName;	}	public void setProxyInterfaceName(String proxyInterfaceName) {		this.proxyInterfaceName = proxyInterfaceName;	}	public Class getMappedClass() throws MappingException {		if (className==null) return null;		try {			return ReflectHelper.classForName(className);		}		catch (ClassNotFoundException cnfe) {			throw new MappingException("entity class not found: " + className, cnfe);		}	}	public Class getProxyInterface() {		if (proxyInterfaceName==null) return null;		try {			return ReflectHelper.classForName(proxyInterfaceName);		}		catch (ClassNotFoundException cnfe) {			throw new MappingException("proxy class not found: " + proxyInterfaceName, cnfe);		}	}	public boolean useDynamicInsert() {		return dynamicInsert;	}	abstract int nextSubclassId();	public abstract int getSubclassId();		public boolean useDynamicUpdate() {		return dynamicUpdate;	}	public void setDynamicInsert(boolean dynamicInsert) {		this.dynamicInsert = dynamicInsert;	}	public void setDynamicUpdate(boolean dynamicUpdate) {		this.dynamicUpdate = dynamicUpdate;	}	public String getDiscriminatorValue() {		return discriminatorValue;	}	public void addSubclass(Subclass subclass) throws MappingException {		// inheritance cycle detection (paranoid check)		PersistentClass superclass = getSuperclass();		while (superclass!=null) {			if( subclass.getEntityName().equals( superclass.getEntityName() ) ) {				throw new MappingException(					"Circular inheritance mapping detected: " +					subclass.getEntityName() +					" will have it self as superclass when extending " +					getEntityName()				);			}			superclass = superclass.getSuperclass();		}		subclasses.add(subclass);	}	public boolean hasSubclasses() {		return subclasses.size() > 0;	}	public int getSubclassSpan() {		int n = subclasses.size();		Iterator iter = subclasses.iterator();		while ( iter.hasNext() ) {			n += ( (Subclass) iter.next() ).getSubclassSpan();		}		return n;	}	/**	 * Iterate over subclasses in a special 'order', most derived subclasses	 * first.	 */	public Iterator getSubclassIterator() {		Iterator[] iters = new Iterator[ subclasses.size() + 1 ];		Iterator iter = subclasses.iterator();		int i=0;		while ( iter.hasNext() ) {			iters[i++] = ( (Subclass) iter.next() ).getSubclassIterator();		}		iters[i] = subclasses.iterator();		return new JoinedIterator(iters);	}	public Iterator getSubclassClosureIterator() {		ArrayList iters = new ArrayList();		iters.add( new SingletonIterator(this) );		Iterator iter = getSubclassIterator();		while ( iter.hasNext() ) {			PersistentClass clazz = (PersistentClass)  iter.next();			iters.add( clazz.getSubclassClosureIterator() );		}		return new JoinedIterator(iters);	}		public Table getIdentityTable() {		return getRootTable();	}		public Iterator getDirectSubclasses() {		return subclasses.iterator();	}	public void addProperty(Property p) {		properties.add(p);		p.setPersistentClass(this);	}	public abstract Table getTable();	public String getEntityName() {		return entityName;	}	public abstract boolean isMutable();	public abstract boolean hasIdentifierProperty();	public abstract Property getIdentifierProperty();	public abstract KeyValue getIdentifier();	public abstract Property getVersion();	public abstract Value getDiscriminator();	public abstract boolean isInherited();	public abstract boolean isPolymorphic();	public abstract boolean isVersioned();	public abstract String getCacheConcurrencyStrategy();	public abstract PersistentClass getSuperclass();	public abstract boolean isExplicitPolymorphism();	public abstract boolean isDiscriminatorInsertable();	public abstract Iterator getPropertyClosureIterator();	public abstract Iterator getTableClosureIterator();	public abstract Iterator getKeyClosureIterator();	protected void addSubclassProperty(Property prop) {		subclassProperties.add(prop);	}	protected void addSubclassJoin(Join join) {		subclassJoins.add(join);	}	protected void addSubclassTable(Table subclassTable) {		subclassTables.add(subclassTable);	}	public Iterator getSubclassPropertyClosureIterator() {		ArrayList iters = new ArrayList();		iters.add( getPropertyClosureIterator() );		iters.add( subclassProperties.iterator() );		for ( int i=0; i<subclassJoins.size(); i++ ) {			Join join = (Join) subclassJoins.get(i);			iters.add( join.getPropertyIterator() );		}		return new JoinedIterator(iters);	}	public Iterator getSubclassJoinClosureIterator() {		return new JoinedIterator( getJoinClosureIterator(), subclassJoins.iterator() );	}	public Iterator getSubclassTableClosureIterator() {		return new JoinedIterator( getTableClosureIterator(), subclassTables.iterator() );	}	public boolean isClassOrSuperclassJoin(Join join) {		return joins.contains(join);	}	public boolean isClassOrSuperclassTable(Table closureTable) {		return getTable()==closureTable;	}	public boolean isLazy() {		return lazy;	}	public void setLazy(boolean lazy) {		this.lazy = lazy;	}	public abstract boolean hasEmbeddedIdentifier();	public abstract Class getEntityPersisterClass();	public abstract void setEntityPersisterClass(Class classPersisterClass);	public abstract Table getRootTable();	public abstract RootClass getRootClass();	public abstract KeyValue getKey();	public void setDiscriminatorValue(String discriminatorValue) {		this.discriminatorValue = discriminatorValue;	}	public void setEntityName(String entityName) {		this.entityName = entityName==null ? null : entityName.intern();	}	public void createPrimaryKey() {		//Primary key constraint		PrimaryKey pk = new PrimaryKey();		Table table = getTable();		pk.setTable(table);		pk.setName( PK_ALIAS.toAliasString( table.getName() ) );		table.setPrimaryKey(pk);		pk.addColumns( getKey().getColumnIterator() );	}	public abstract String getWhere();	public int getBatchSize() {		return batchSize;	}	public void setBatchSize(int batchSize) {		this.batchSize = batchSize;	}	public boolean hasSelectBeforeUpdate() {		return selectBeforeUpdate;	}	public void setSelectBeforeUpdate(boolean selectBeforeUpdate) {		this.selectBeforeUpdate = selectBeforeUpdate;	}	/**	 * Build an iterator of properties which are "referenceable".	 *	 * @see #getReferencedProperty for a discussion of "referenceable"	 * @return The property iterator.	 */	public Iterator getReferenceablePropertyIterator() {		return getPropertyClosureIterator();	}	/**	 * Given a property path, locate the appropriate referenceable property reference.	 * <p/>	 * A referenceable property is a property  which can be a target of a foreign-key	 * mapping (an identifier or explcitly named in a property-ref).	 *	 * @param propertyPath The property path to resolve into a property reference.	 * @return The property reference (never null).	 * @throws MappingException If the property could not be found.	 */	public Property getReferencedProperty(String propertyPath) throws MappingException {		try {			return getRecursiveProperty( propertyPath, getReferenceablePropertyIterator() );		}		catch ( MappingException e ) {			throw new MappingException(					"property-ref [" + propertyPath + "] not found on entity [" + getEntityName() + "]", e			);		}	}	public Property getRecursiveProperty(String propertyPath) throws MappingException {		try {			return getRecursiveProperty( propertyPath, getPropertyIterator() );		}		catch ( MappingException e ) {			throw new MappingException(					"property [" + propertyPath + "] not found on entity [" + getEntityName() + "]", e			);		}	}	private Property getRecursiveProperty(String propertyPath, Iterator iter) throws MappingException {		Property property = null;		StringTokenizer st = new StringTokenizer( propertyPath, ".", false );		try {			while ( st.hasMoreElements() ) {				final String element = ( String ) st.nextElement();				if ( property == null ) {					Property identifierProperty = getIdentifierProperty();					if ( identifierProperty != null && identifierProperty.getName().equals( element ) ) {						// we have a mapped identifier property and the root of						// the incoming property path matched that identifier						// property						property = identifierProperty;					}					else if ( identifierProperty == null && getIdentifierMapper() != null ) {						// we have an embedded composite identifier						try {							identifierProperty = getProperty( element, getIdentifierMapper().getPropertyIterator() );							if ( identifierProperty != null ) {								// the root of the incoming property path matched one								// of the embedded composite identifier properties								property = identifierProperty;							}						}						catch( MappingException ignore ) {							// ignore it...						}					}					if ( property == null ) {						property = getProperty( element, iter );					}				}				else {					//flat recursive algorithm					property = ( ( Component ) property.getValue() ).getProperty( element );				}			}		}		catch ( MappingException e ) {			throw new MappingException( "property [" + propertyPath + "] not found on entity [" + getEntityName() + "]" );

⌨️ 快捷键说明

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