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

📄 toonefksecondpass.java

📁 hibernate3.2.6源码和jar包
💻 JAVA
字号:
// $Id: ToOneFkSecondPass.java 14418 2008-03-11 00:25:55Z epbernard $package org.hibernate.cfg;import java.util.Iterator;import org.hibernate.AnnotationException;import org.hibernate.AssertionFailure;import org.hibernate.MappingException;import org.hibernate.cfg.annotations.TableBinder;import org.hibernate.mapping.ManyToOne;import org.hibernate.mapping.OneToOne;import org.hibernate.mapping.PersistentClass;import org.hibernate.mapping.Property;import org.hibernate.mapping.ToOne;import org.hibernate.mapping.KeyValue;import org.hibernate.mapping.Component;import org.hibernate.util.StringHelper;/** * Enable a proper set of the FK columns in respect with the id column order * Allow the correct implementation of the default EJB3 values which needs both * sides of the association to be resolved * * @author Emmanuel Bernard */public class ToOneFkSecondPass extends FkSecondPass {	private boolean unique;	private ExtendedMappings mappings;	private String path;	private String entityClassName;	public ToOneFkSecondPass(			ToOne value, Ejb3JoinColumn[] columns, boolean unique, String entityClassName, String path, ExtendedMappings mappings	) {		super( value, columns );		this.mappings = mappings;		this.unique = unique;		this.entityClassName = entityClassName;		this.path = entityClassName != null ? path.substring( entityClassName.length() + 1 ) : path;	}	public String getReferencedEntityName() {		return ( (ToOne) value ).getReferencedEntityName();	}	public boolean isInPrimaryKey() {		if ( entityClassName == null ) return false;		final PersistentClass persistentClass = mappings.getClass( entityClassName );		Property property = persistentClass.getIdentifierProperty();		if ( path == null ) {			return false;		}		else if ( property != null) {			//try explicit identifier property			return path.startsWith( property.getName() + "." );		}		else {			//try the embedded property			//embedded property starts their path with 'id.' See PropertyPreloadedData( ) use when idClass != null in AnnotationBinder			if ( path.startsWith( "id." ) ) {				KeyValue valueIdentifier = persistentClass.getIdentifier();				String localPath = path.substring( 3 );				if ( valueIdentifier instanceof Component ) {					Iterator it = ( (Component) valueIdentifier ).getPropertyIterator();					while ( it.hasNext() ) {						Property idProperty = (Property) it.next();						if ( localPath.startsWith( idProperty.getName() ) ) return true;					}				}			}		}		return false;	}	public void doSecondPass(java.util.Map persistentClasses) throws MappingException {		if ( value instanceof ManyToOne ) {			ManyToOne manyToOne = (ManyToOne) value;			PersistentClass ref = (PersistentClass) persistentClasses.get( manyToOne.getReferencedEntityName() );			if ( ref == null ) {				throw new AnnotationException(						"@OneToOne or @ManyToOne on "								+ StringHelper.qualify( entityClassName, path )								+ " references an unknown entity: "								+ manyToOne.getReferencedEntityName()				);			}			BinderHelper.createSyntheticPropertyReference( columns, ref, null, manyToOne, false, mappings );			TableBinder.bindFk( ref, null, columns, manyToOne, unique, mappings );			/*			 * HbmBinder does this only when property-ref != null, but IMO, it makes sense event if it is null			 */			if ( !manyToOne.isIgnoreNotFound() ) manyToOne.createPropertyRefConstraints( persistentClasses );		}		else if ( value instanceof OneToOne ) {			( (OneToOne) value ).createForeignKey();		}		else {			throw new AssertionFailure( "FkSecondPass for a wrong value type: " + value.getClass().getName() );		}	}}

⌨️ 快捷键说明

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