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

📄 hbmbinder.java

📁 一个Java持久层类库
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
		// }		// }		// else {		// bindSimpleValue( idNode, id, false, propertyName, mappings );		// PojoRepresentation pojo = entity.getPojoRepresentation();		// id.setTypeUsingReflection( pojo.getClassName(), propertyName );		//		// Property prop = new Property();		// prop.setValue( id );		// bindProperty( idNode, prop, mappings, inheritedMetas );		// entity.setIdentifierProperty( prop );		// }		if ( propertyName == null ) {			bindSimpleValue( idNode, id, false, RootClass.DEFAULT_IDENTIFIER_COLUMN_NAME, mappings );		}		else {			bindSimpleValue( idNode, id, false, propertyName, mappings );		}		if ( propertyName == null || !entity.hasPojoRepresentation() ) {			if ( !id.isTypeSpecified() ) {				throw new MappingException( "must specify an identifier type: "					+ entity.getEntityName() );			}		}		else {			id.setTypeUsingReflection( entity.getClassName(), propertyName );		}		if ( propertyName != null ) {			Property prop = new Property();			prop.setValue( id );			bindProperty( idNode, prop, mappings, inheritedMetas );			entity.setIdentifierProperty( prop );		}		// TODO:		/*		 * if ( id.getHibernateType().getReturnedClass().isArray() ) throw new MappingException(		 * "illegal use of an array as an identifier (arrays don't reimplement equals)" );		 */		makeIdentifier( idNode, id, mappings );	}	private static void bindCompositeId(Element idNode, RootClass entity, Mappings mappings,			java.util.Map inheritedMetas) throws MappingException {		String propertyName = idNode.attributeValue( "name" );		Component id = new Component( entity );		entity.setIdentifier( id );		bindCompositeId( idNode, id, entity, propertyName, mappings, inheritedMetas );		if ( propertyName == null ) {			entity.setEmbeddedIdentifier( id.isEmbedded() );			if ( id.isEmbedded() ) {				// todo : what is the implication of this?				id.setDynamic( !entity.hasPojoRepresentation() );				/*				 * Property prop = new Property(); prop.setName("id");				 * prop.setPropertyAccessorName("embedded"); prop.setValue(id);				 * entity.setIdentifierProperty(prop);				 */			}		}		else {			Property prop = new Property();			prop.setValue( id );			bindProperty( idNode, prop, mappings, inheritedMetas );			entity.setIdentifierProperty( prop );		}		makeIdentifier( idNode, id, mappings );	}	private static void bindVersioningProperty(Table table, Element subnode, Mappings mappings,			String name, RootClass entity, java.util.Map inheritedMetas) {		String propertyName = subnode.attributeValue( "name" );		SimpleValue val = new SimpleValue( table );		bindSimpleValue( subnode, val, false, propertyName, mappings );		if ( !val.isTypeSpecified() ) {			// this is either a <version/> tag with no type attribute,			// or a <timestamp/> tag			if ( "version".equals( name ) ) {				val.setTypeName( "integer" );			}			else {				if ( "db".equals( subnode.attributeValue( "source" ) ) ) {					val.setTypeName( "dbtimestamp" );				}				else {					val.setTypeName( "timestamp" );				}			}		}		Property prop = new Property();		prop.setValue( val );		bindProperty( subnode, prop, mappings, inheritedMetas );		// for version properties marked as being generated, make sure they are "always"		// generated; aka, "insert" is invalid; this is dis-allowed by the DTD,		// but just to make sure...		if ( prop.getGeneration() == PropertyGeneration.INSERT ) {			throw new MappingException( "'generated' attribute cannot be 'insert' for versioning property" );		}		makeVersion( subnode, val );		entity.setVersion( prop );		entity.addProperty( prop );	}	private static void bindDiscriminatorProperty(Table table, RootClass entity, Element subnode,			Mappings mappings) {		SimpleValue discrim = new SimpleValue( table );		entity.setDiscriminator( discrim );		bindSimpleValue(				subnode,				discrim,				false,				RootClass.DEFAULT_DISCRIMINATOR_COLUMN_NAME,				mappings			);		if ( !discrim.isTypeSpecified() ) {			discrim.setTypeName( "string" );			// ( (Column) discrim.getColumnIterator().next() ).setType(type);		}		entity.setPolymorphic( true );		if ( "true".equals( subnode.attributeValue( "force" ) ) )			entity.setForceDiscriminator( true );		if ( "false".equals( subnode.attributeValue( "insert" ) ) )			entity.setDiscriminatorInsertable( false );	}	public static void bindClass(Element node, PersistentClass persistentClass, Mappings mappings,			java.util.Map inheritedMetas) throws MappingException {		// transfer an explicitly defined entity name		// handle the lazy attribute		Attribute lazyNode = node.attribute( "lazy" );		boolean lazy = lazyNode == null ?				mappings.isDefaultLazy() :				"true".equals( lazyNode.getValue() );		// go ahead and set the lazy here, since pojo.proxy can override it.		persistentClass.setLazy( lazy );		String entityName = node.attributeValue( "entity-name" );		if ( entityName == null ) entityName = getClassName( node.attribute("name"), mappings );		if ( entityName==null ) {			throw new MappingException( "Unable to determine entity name" );		}		persistentClass.setEntityName( entityName );		bindPojoRepresentation( node, persistentClass, mappings, inheritedMetas );		bindDom4jRepresentation( node, persistentClass, mappings, inheritedMetas );		bindMapRepresentation( node, persistentClass, mappings, inheritedMetas );		bindPersistentClassCommonValues( node, persistentClass, mappings, inheritedMetas );	}	private static void bindPojoRepresentation(Element node, PersistentClass entity,			Mappings mappings, java.util.Map metaTags) {		String className = getClassName( node.attribute( "name" ), mappings );		String proxyName = getClassName( node.attribute( "proxy" ), mappings );		entity.setClassName( className );		if ( proxyName != null ) {			entity.setProxyInterfaceName( proxyName );			entity.setLazy( true );		}		else if ( entity.isLazy() ) {			entity.setProxyInterfaceName( className );		}		Element tuplizer = locateTuplizerDefinition( node, EntityMode.POJO );		if ( tuplizer != null ) {			entity.addTuplizer( EntityMode.POJO, tuplizer.attributeValue( "class" ) );		}	}	private static void bindDom4jRepresentation(Element node, PersistentClass entity,			Mappings mappings, java.util.Map inheritedMetas) {		String nodeName = node.attributeValue( "node" );		if (nodeName==null) nodeName = StringHelper.unqualify( entity.getEntityName() );		entity.setNodeName(nodeName);		Element tuplizer = locateTuplizerDefinition( node, EntityMode.DOM4J );		if ( tuplizer != null ) {			entity.addTuplizer( EntityMode.DOM4J, tuplizer.attributeValue( "class" ) );		}	}	private static void bindMapRepresentation(Element node, PersistentClass entity,			Mappings mappings, java.util.Map inheritedMetas) {		Element tuplizer = locateTuplizerDefinition( node, EntityMode.MAP );		if ( tuplizer != null ) {			entity.addTuplizer( EntityMode.MAP, tuplizer.attributeValue( "class" ) );		}	}	/**	 * Locate any explicit tuplizer definition in the metadata, for the given entity-mode.	 *	 * @param container The containing element (representing the entity/component)	 * @param entityMode The entity-mode for which to locate the tuplizer element	 * @return The tuplizer element, or null.	 */	private static Element locateTuplizerDefinition(Element container, EntityMode entityMode) {		Iterator itr = container.elements( "tuplizer" ).iterator();		while( itr.hasNext() ) {			final Element tuplizerElem = ( Element ) itr.next();			if ( entityMode.toString().equals( tuplizerElem.attributeValue( "entity-mode") ) ) {				return tuplizerElem;			}		}		return null;	}	private static void bindPersistentClassCommonValues(Element node, PersistentClass entity,			Mappings mappings, java.util.Map inheritedMetas) throws MappingException {		// DISCRIMINATOR		Attribute discriminatorNode = node.attribute( "discriminator-value" );		entity.setDiscriminatorValue( ( discriminatorNode == null )			? entity.getEntityName()			: discriminatorNode.getValue() );		// DYNAMIC UPDATE		Attribute dynamicNode = node.attribute( "dynamic-update" );		entity.setDynamicUpdate(				dynamicNode != null && "true".equals( dynamicNode.getValue() )		);		// DYNAMIC INSERT		Attribute insertNode = node.attribute( "dynamic-insert" );		entity.setDynamicInsert(				insertNode != null && "true".equals( insertNode.getValue() )		);		// IMPORT		mappings.addImport( entity.getEntityName(), entity.getEntityName() );		if ( mappings.isAutoImport() && entity.getEntityName().indexOf( '.' ) > 0 ) {			mappings.addImport(					entity.getEntityName(),					StringHelper.unqualify( entity.getEntityName() )				);		}		// BATCH SIZE		Attribute batchNode = node.attribute( "batch-size" );		if ( batchNode != null ) entity.setBatchSize( Integer.parseInt( batchNode.getValue() ) );		// SELECT BEFORE UPDATE		Attribute sbuNode = node.attribute( "select-before-update" );		if ( sbuNode != null ) entity.setSelectBeforeUpdate( "true".equals( sbuNode.getValue() ) );		// OPTIMISTIC LOCK MODE		Attribute olNode = node.attribute( "optimistic-lock" );		entity.setOptimisticLockMode( getOptimisticLockMode( olNode ) );		entity.setMetaAttributes( getMetas( node, inheritedMetas ) );		// PERSISTER		Attribute persisterNode = node.attribute( "persister" );		if ( persisterNode != null ) {			try {				entity.setEntityPersisterClass( ReflectHelper.classForName( persisterNode					.getValue() ) );			}			catch (ClassNotFoundException cnfe) {				throw new MappingException( "Could not find persister class: "					+ persisterNode.getValue() );			}		}		// CUSTOM SQL		handleCustomSQL( node, entity );		Iterator tables = node.elementIterator( "synchronize" );		while ( tables.hasNext() ) {			entity.addSynchronizedTable( ( (Element) tables.next() ).attributeValue( "table" ) );		}		Attribute abstractNode = node.attribute( "abstract" );		Boolean isAbstract = abstractNode == null				? null		        : "true".equals( abstractNode.getValue() )						? Boolean.TRUE	                    : "false".equals( abstractNode.getValue() )								? Boolean.FALSE	                            : null;		entity.setAbstract( isAbstract );	}	private static void handleCustomSQL(Element node, PersistentClass model)			throws MappingException {		Element element = node.element( "sql-insert" );		if ( element != null ) {			boolean callable = isCallable( element );			model.setCustomSQLInsert( element.getTextTrim(), callable, getResultCheckStyle( element, callable ) );		}		element = node.element( "sql-delete" );		if ( element != null ) {			boolean callable = isCallable( element );			model.setCustomSQLDelete( element.getTextTrim(), callable, getResultCheckStyle( element, callable ) );		}		element = node.element( "sql-update" );		if ( element != null ) {			boolean callable = isCallable( element );			model.setCustomSQLUpdate( element.getTextTrim(), callable, getResultCheckStyle( element, callable ) );		}		element = node.element( "loader" );		if ( element != null ) {			model.setLoaderName( element.attributeValue( "query-ref" ) );		}	}	private static void handleCustomSQL(Element node, Join model) throws MappingException {		Element element = node.element( "sql-insert" );		if ( element != null ) {			boolean callable = isCallable( element );			model.setCustomSQLInsert( element.getTextTrim(), callable, getResultCheckStyle( element, callable ) );		}		element = node.element( "sql-delete" );		if ( element != null ) {			boolean callable = isCallable( element );			model.setCustomSQLDelete( element.getTextTrim(), callable, getResultCheckStyle( element, callable ) );		}		element = node.element( "sql-update" );		if ( element != null ) {			boolean callable = isCallable( element );			model.setCustomSQLUpdate( element.getTextTrim(), callable, getResultCheckStyle( element, callable ) );		}	}	private static void handleCustomSQL(Element node, Collection model) throws MappingException {		Element element = node.element( "sql-insert" );		if ( element != null ) {			boolean callable = isCallable( element, true );			model.setCustomSQLInsert( element.getTextTrim(), callable, getResultCheckStyle( element, callable ) );		}		element = node.element( "sql-delete" );		if ( element != null ) {			boolean callable = isCallable( element, true );			model.setCustomSQLDelete( element.getTextTrim(), callable, getResultCheckStyle( element, callable ) );		}		element = node.element( "sql-update" );		if ( element != null ) {			boolean callable = isCallable( element, true );			model.setCustomSQLUpdate( element.getTextTrim(), callable, getResultCheckStyle( element, callable ) );		}		element = node.element( "sql-delete-all" );		if ( element != null ) {			boolean callable = isCallable( element, true );			model.setCustomSQLDeleteAll( element.getTextTrim(), callable, getResultCheckStyle( element, callable ) );		}	}	private static boolean isCallable(Element e) throws MappingException {		return isCallable( e, true );	}	private static boolean isCallable(Element element, boolean supportsCallable)			throws MappingException {		Attribute attrib = element.attribute( "callable" );		if ( attrib != null && "true".equals( attrib.getValue() ) ) {

⌨️ 快捷键说明

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