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

📄 abstractpropertyholder.java

📁 hibernate3.2.6源码和jar包
💻 JAVA
字号:
//$Id: AbstractPropertyHolder.java 12781 2007-07-19 22:28:14Z epbernard $package org.hibernate.cfg;import java.util.HashMap;import java.util.Map;import javax.persistence.AssociationOverride;import javax.persistence.AssociationOverrides;import javax.persistence.AttributeOverride;import javax.persistence.AttributeOverrides;import javax.persistence.Column;import javax.persistence.Embeddable;import javax.persistence.Entity;import javax.persistence.JoinColumn;import javax.persistence.MappedSuperclass;import org.hibernate.AssertionFailure;import org.hibernate.annotations.common.reflection.XAnnotatedElement;import org.hibernate.annotations.common.reflection.XClass;import org.hibernate.annotations.common.reflection.XProperty;import org.hibernate.util.StringHelper;/** * @author Emmanuel Bernard */public abstract class AbstractPropertyHolder implements PropertyHolder {	protected PropertyHolder parent;	private Map<String, Column[]> holderColumnOverride;	private Map<String, Column[]> currentPropertyColumnOverride;	private Map<String, JoinColumn[]> holderJoinColumnOverride;	private Map<String, JoinColumn[]> currentPropertyJoinColumnOverride;	private String path;	private ExtendedMappings mappings;	public AbstractPropertyHolder(			String path, PropertyHolder parent, XClass clazzToProcess, ExtendedMappings mappings	) {		this.path = path;		this.parent = parent;		this.mappings = mappings;		buildHierarchyColumnOverride( clazzToProcess );	}	public String getPath() {		return path;	}	/**	 * property can be null	 */	protected void setCurrentProperty(XProperty property) {		if ( property == null ) {			this.currentPropertyColumnOverride = null;			this.currentPropertyJoinColumnOverride = null;		}		else {			this.currentPropertyColumnOverride = buildColumnOverride(					property,					getPath()			);			if ( this.currentPropertyColumnOverride.size() == 0 ) {				this.currentPropertyColumnOverride = null;			}			this.currentPropertyJoinColumnOverride = buildJoinColumnOverride(					property,					getPath()			);			if ( this.currentPropertyJoinColumnOverride.size() == 0 ) {				this.currentPropertyJoinColumnOverride = null;			}		}	}	/**	 * Get column overriding, property first, then parent, then holder	 */	public Column[] getOverriddenColumn(String propertyName) {		Column[] override = null;		if ( parent != null ) {			override = parent.getOverriddenColumn( propertyName );		}		if ( override == null && currentPropertyColumnOverride != null ) {			override = currentPropertyColumnOverride.get( propertyName );		}		if ( override == null && holderColumnOverride != null ) {			override = holderColumnOverride.get( propertyName );		}		return override;	}	/**	 * Get column overriding, property first, then parent, then holder	 */	public JoinColumn[] getOverriddenJoinColumn(String propertyName) {		JoinColumn[] override = null;		if ( parent != null ) {			override = parent.getOverriddenJoinColumn( propertyName );		}		if ( override == null && currentPropertyJoinColumnOverride != null ) {			override = currentPropertyJoinColumnOverride.get( propertyName );		}		if ( override == null && holderJoinColumnOverride != null ) {			override = holderJoinColumnOverride.get( propertyName );		}		return override;	}	private void buildHierarchyColumnOverride(XClass element) {		XClass current = element;		Map<String, Column[]> columnOverride = new HashMap<String, Column[]>();		Map<String, JoinColumn[]> joinColumnOverride = new HashMap<String, JoinColumn[]>();		while ( current != null && !mappings.getReflectionManager().toXClass( Object.class ).equals( current ) ) {			if ( current.isAnnotationPresent( Entity.class ) || current.isAnnotationPresent( MappedSuperclass.class )					|| current.isAnnotationPresent( Embeddable.class ) ) {				//FIXME is embeddable override?				Map<String, Column[]> currentOverride = buildColumnOverride( current, getPath() );				Map<String, JoinColumn[]> currentJoinOverride = buildJoinColumnOverride( current, getPath() );				currentOverride.putAll( columnOverride ); //subclasses have precedence over superclasses				currentJoinOverride.putAll( joinColumnOverride ); //subclasses have precedence over superclasses				columnOverride = currentOverride;				joinColumnOverride = currentJoinOverride;			}			current = current.getSuperclass();		}		holderColumnOverride = columnOverride.size() > 0 ? columnOverride : null;		holderJoinColumnOverride = joinColumnOverride.size() > 0 ? joinColumnOverride : null;	}	private static Map<String, Column[]> buildColumnOverride(XAnnotatedElement element, String path) {		Map<String, Column[]> columnOverride = new HashMap<String, Column[]>();		if ( element == null ) return columnOverride;		AttributeOverride singleOverride = element.getAnnotation( AttributeOverride.class );		AttributeOverrides multipleOverrides = element.getAnnotation( AttributeOverrides.class );		AttributeOverride[] overrides;		if ( singleOverride != null ) {			overrides = new AttributeOverride[] { singleOverride };		}		else if ( multipleOverrides != null ) {			overrides = multipleOverrides.value();		}		else {			overrides = null;		}		//fill overriden columns		if ( overrides != null ) {			for (AttributeOverride depAttr : overrides) {				columnOverride.put(						StringHelper.qualify( path, depAttr.name() ),						new Column[] { depAttr.column() }				);			}		}		return columnOverride;	}	private static Map<String, JoinColumn[]> buildJoinColumnOverride(XAnnotatedElement element, String path) {		Map<String, JoinColumn[]> columnOverride = new HashMap<String, JoinColumn[]>();		if ( element == null ) return columnOverride;		AssociationOverride singleOverride = element.getAnnotation( AssociationOverride.class );		AssociationOverrides multipleOverrides = element.getAnnotation( AssociationOverrides.class );		AssociationOverride[] overrides;		if ( singleOverride != null ) {			overrides = new AssociationOverride[] { singleOverride };		}		else if ( multipleOverrides != null ) {			overrides = multipleOverrides.value();		}		else {			overrides = null;		}		//fill overriden columns		if ( overrides != null ) {			for (AssociationOverride depAttr : overrides) {				columnOverride.put(						StringHelper.qualify( path, depAttr.name() ),						depAttr.joinColumns()				);			}		}		return columnOverride;	}	public void setParentProperty(String parentProperty) {		throw new AssertionFailure( "Setting the parent property to a non component" );	}}

⌨️ 快捷键说明

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