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

📄 hbmbinder.java

📁 hibernate 开源框架的代码 jar包希望大家能喜欢
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
			String proxyVal,			boolean defaultLazy	) {		Attribute lazyNode = node.attribute( "lazy" );		boolean isLazyTrue = lazyNode == null ?				defaultLazy && fetchable.isLazy() : //fetch="join" overrides default laziness				lazyNode.getValue().equals(proxyVal); //fetch="join" overrides default laziness		fetchable.setLazy( isLazyTrue );	}	private static void initLaziness(			Element node,			ToOne fetchable,			Mappings mappings,			boolean defaultLazy	) {		if ( "no-proxy".equals( node.attributeValue( "lazy" ) ) ) {			fetchable.setUnwrapProxy(true);			fetchable.setLazy(true);			//TODO: better to degrade to lazy="false" if uninstrumented		}		else {			initLaziness(node, fetchable, mappings, "proxy", defaultLazy);		}	}	private static void bindColumnsOrFormula(Element node, SimpleValue simpleValue, String path,			boolean isNullable, Mappings mappings) {		Attribute formulaNode = node.attribute( "formula" );		if ( formulaNode != null ) {			Formula f = new Formula();			f.setFormula( formulaNode.getText() );			simpleValue.addFormula( f );		}		else {			bindColumns( node, simpleValue, isNullable, true, path, mappings );		}	}	private static void bindComment(Table table, Element node) {		Element comment = node.element("comment");		if (comment!=null) table.setComment( comment.getTextTrim() );	}	public static void bindManyToOne(Element node, ManyToOne manyToOne, String path,			boolean isNullable, Mappings mappings) throws MappingException {		bindColumnsOrFormula( node, manyToOne, path, isNullable, mappings );		initOuterJoinFetchSetting( node, manyToOne );		initLaziness( node, manyToOne, mappings, true );		Attribute ukName = node.attribute( "property-ref" );		if ( ukName != null ) {			manyToOne.setReferencedPropertyName( ukName.getValue() );		}		manyToOne.setReferencedEntityName( getEntityName( node, mappings ) );		String embed = node.attributeValue( "embed-xml" );		manyToOne.setEmbedded( embed == null || "true".equals( embed ) );		String notFound = node.attributeValue( "not-found" );		manyToOne.setIgnoreNotFound( "ignore".equals( notFound ) );		if( ukName != null && !manyToOne.isIgnoreNotFound() ) {			if ( !node.getName().equals("many-to-many") ) { //TODO: really bad, evil hack to fix!!!				mappings.addSecondPass( new ManyToOneSecondPass(manyToOne) );			}		}		Attribute fkNode = node.attribute( "foreign-key" );		if ( fkNode != null ) manyToOne.setForeignKeyName( fkNode.getValue() );		validateCascade( node, path );	}	private static void validateCascade(Element node, String path) {		String cascade = node.attributeValue( "cascade" );		if ( cascade != null && cascade.indexOf( "delete-orphan" ) >= 0 ) {			throw new MappingException( "single-valued associations do not support orphan delete: " + path );		}	}	public static void bindAny(Element node, Any any, boolean isNullable, Mappings mappings)			throws MappingException {		any.setIdentifierType( getTypeFromXML( node ) );		Attribute metaAttribute = node.attribute( "meta-type" );		if ( metaAttribute != null ) {			any.setMetaType( metaAttribute.getValue() );			Iterator iter = node.elementIterator( "meta-value" );			if ( iter.hasNext() ) {				HashMap values = new HashMap();				org.hibernate.type.Type metaType = TypeFactory.heuristicType( any.getMetaType() );				while ( iter.hasNext() ) {					Element metaValue = (Element) iter.next();					try {						Object value = ( (DiscriminatorType) metaType ).stringToObject( metaValue							.attributeValue( "value" ) );						String entityName = getClassName( metaValue.attribute( "class" ), mappings );						values.put( value, entityName );					}					catch (ClassCastException cce) {						throw new MappingException( "meta-type was not a DiscriminatorType: "							+ metaType.getName() );					}					catch (Exception e) {						throw new MappingException( "could not interpret meta-value", e );					}				}				any.setMetaValues( values );			}		}		bindColumns( node, any, isNullable, false, null, mappings );	}	public static void bindOneToOne(Element node, OneToOne oneToOne, String path, boolean isNullable,			Mappings mappings) throws MappingException {		bindColumns( node, oneToOne, isNullable, false, null, mappings );		Attribute constrNode = node.attribute( "constrained" );		boolean constrained = constrNode != null && constrNode.getValue().equals( "true" );		oneToOne.setConstrained( constrained );		oneToOne.setForeignKeyType( constrained ?				ForeignKeyDirection.FOREIGN_KEY_FROM_PARENT :				ForeignKeyDirection.FOREIGN_KEY_TO_PARENT );		initOuterJoinFetchSetting( node, oneToOne );		initLaziness( node, oneToOne, mappings, true );		oneToOne.setEmbedded( "true".equals( node.attributeValue( "embed-xml" ) ) );		Attribute fkNode = node.attribute( "foreign-key" );		if ( fkNode != null ) oneToOne.setForeignKeyName( fkNode.getValue() );		Attribute ukName = node.attribute( "property-ref" );		if ( ukName != null ) oneToOne.setReferencedPropertyName( ukName.getValue() );		oneToOne.setPropertyName( node.attributeValue( "name" ) );		oneToOne.setReferencedEntityName( getEntityName( node, mappings ) );		validateCascade( node, path );	}	public static void bindOneToMany(Element node, OneToMany oneToMany, Mappings mappings)			throws MappingException {		oneToMany.setReferencedEntityName( getEntityName( node, mappings ) );		String embed = node.attributeValue( "embed-xml" );		oneToMany.setEmbedded( embed == null || "true".equals( embed ) );		String notFound = node.attributeValue( "not-found" );		oneToMany.setIgnoreNotFound( "ignore".equals( notFound ) );	}	public static void bindColumn(Element node, Column column, boolean isNullable) {		Attribute lengthNode = node.attribute( "length" );		if ( lengthNode != null ) column.setLength( Integer.parseInt( lengthNode.getValue() ) );		Attribute scalNode = node.attribute( "scale" );		if ( scalNode != null ) column.setScale( Integer.parseInt( scalNode.getValue() ) );		Attribute precNode = node.attribute( "precision" );		if ( precNode != null ) column.setPrecision( Integer.parseInt( precNode.getValue() ) );		Attribute nullNode = node.attribute( "not-null" );		column.setNullable( nullNode == null ? isNullable : nullNode.getValue().equals( "false" ) );		Attribute unqNode = node.attribute( "unique" );		if ( unqNode != null ) column.setUnique( unqNode.getValue().equals( "true" ) );		column.setCheckConstraint( node.attributeValue( "check" ) );		column.setDefaultValue( node.attributeValue( "default" ) );		Attribute typeNode = node.attribute( "sql-type" );		if ( typeNode != null ) column.setSqlType( typeNode.getValue() );		Element comment = node.element("comment");		if (comment!=null) column.setComment( comment.getTextTrim() );	}	/**	 * Called for arrays and primitive arrays	 */	public static void bindArray(Element node, Array array, String prefix, String path,			Mappings mappings, java.util.Map inheritedMetas) throws MappingException {		bindCollection( node, array, prefix, path, mappings, inheritedMetas );		Attribute att = node.attribute( "element-class" );		if ( att != null ) array.setElementClassName( getClassName( att, mappings ) );	}	private static Class reflectedPropertyClass(String className, String propertyName)			throws MappingException {		if ( className == null ) return null;		return ReflectHelper.reflectedPropertyClass( className, propertyName );	}	public static void bindComposite(Element node, Component component, String path,			boolean isNullable, Mappings mappings, java.util.Map inheritedMetas)			throws MappingException {		bindComponent(				node,				component,				null,				null,				path,				isNullable,				false,				mappings,				inheritedMetas,				false			);	}	public static void bindCompositeId(Element node, Component component,			PersistentClass persistentClass, String propertyName, Mappings mappings,			java.util.Map inheritedMetas) throws MappingException {		component.setKey( true );		String path = StringHelper.qualify(				persistentClass.getEntityName(),				propertyName == null ? "id" : propertyName );		bindComponent(				node,				component,				persistentClass.getClassName(),				propertyName,				path,				false,				node.attribute( "class" ) == null						&& propertyName == null,				mappings,				inheritedMetas,				false			);		if ( "true".equals( node.attributeValue("mapped") ) ) {			if ( propertyName!=null ) {				throw new MappingException("cannot combine mapped=\"true\" with specified name");			}			Component mapper = new Component(persistentClass);			bindComponent(					node,					mapper,					persistentClass.getClassName(),					null,					path,					false,					true,					mappings,					inheritedMetas,					true				);			persistentClass.setIdentifierMapper(mapper);			Property property = new Property();			property.setName("_identifierMapper");			property.setNodeName("id");			property.setUpdateable(false);			property.setInsertable(false);			property.setValue(mapper);			property.setPropertyAccessorName( "embedded" );			persistentClass.addProperty(property);		}	}	public static void bindComponent(			Element node,			Component component,			String ownerClassName,			String parentProperty,			String path,			boolean isNullable,			boolean isEmbedded,			Mappings mappings,			java.util.Map inheritedMetas,			boolean isIdentifierMapper) throws MappingException {		component.setEmbedded( isEmbedded );		component.setRoleName( path );		inheritedMetas = getMetas( node, inheritedMetas );		component.setMetaAttributes( inheritedMetas );		Attribute classNode = isIdentifierMapper ? null : node.attribute( "class" );		if ( classNode != null ) {			component.setComponentClassName( getClassName( classNode, mappings ) );		}		else if ( "dynamic-component".equals( node.getName() ) ) {			component.setDynamic( true );		}		else if ( isEmbedded ) {			// an "embedded" component (composite ids and unique)			// note that this does not handle nested components			if ( component.getOwner().hasPojoRepresentation() ) {				component.setComponentClassName( component.getOwner().getClassName() );			}			else {				component.setDynamic(true);			}		}		else {			// todo : again, how *should* this work for non-pojo entities?			if ( component.getOwner().hasPojoRepresentation() ) {				Class reflectedClass = reflectedPropertyClass( ownerClassName, parentProperty );				if ( reflectedClass != null ) {					component.setComponentClassName( reflectedClass.getName() );				}			}			else {				component.setDynamic(true);			}		}		String nodeName = node.attributeValue( "node" );		if ( nodeName == null ) nodeName = node.attributeValue( "name" );		if ( nodeName == null ) nodeName = component.getOwner().getNodeName();		component.setNodeName( nodeName );		Iterator iter = node.elementIterator();		while ( iter.hasNext() ) {			Element subnode = (Element) iter.next();			String name = subnode.getName();			String propertyName = getPropertyName( subnode );			String subpath = propertyName == null ? null : StringHelper				.qualify( path, propertyName );			CollectionType collectType = CollectionType.collectionTypeFromString( name );			Value value = null;			if ( collectType != null ) {				Collection collection = collectType.create(						subnode,						subpath,						component.getOwner(),						mappings, inheritedMetas					);				mappings.addCollection( collection );				value = collection;			}			else if ( "many-to-one".equals( name ) || "key-many-to-one".equals( name ) ) {				value = new ManyToOne( component.getTable() );				String relativePath;				if (isEmbedded) {					relativePath = propertyName;				}				else {					relativePath = subpath.substring( component.getOwner().getEntityName().length() + 1 );				}				bindManyToOne( subnode, (ManyToOne) value, relativePath, isNullable, mappings );			}			else if ( "one-to-one".equals( name ) ) {				value = new OneToOne( component.getTable(), component.getOwner() );				String relativePath;				if (isEmbedded) {					relativePath = propertyName;				}				else {					relativePath = subpath.substring( component.getOwner().getEntityName().length() + 1 );				}				bindOneToOne(

⌨️ 快捷键说明

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