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

📄 configuration.java

📁 一个Java持久层类库
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
	/**	 * Generate DDL for creating tables	 *	 * @see org.hibernate.tool.hbm2ddl.SchemaExport	 */	public String[] generateSchemaCreationScript(Dialect dialect) throws HibernateException {		secondPassCompile();		ArrayList script = new ArrayList( 50 );		String defaultCatalog = properties.getProperty( Environment.DEFAULT_CATALOG );		String defaultSchema = properties.getProperty( Environment.DEFAULT_SCHEMA );		Iterator iter = getTableMappings();		while ( iter.hasNext() ) {			Table table = (Table) iter.next();			if ( table.isPhysicalTable() ) {				script.add(						table.sqlCreateString(								dialect,								mapping,								defaultCatalog,								defaultSchema							)					);				Iterator comments = table.sqlCommentStrings( dialect, defaultCatalog, defaultSchema );				while ( comments.hasNext() ) {					script.add( comments.next() );				}			}		}		iter = getTableMappings();		while ( iter.hasNext() ) {			Table table = (Table) iter.next();			if ( table.isPhysicalTable() ) {				if ( !dialect.supportsUniqueConstraintInCreateAlterTable() ) {					Iterator subIter = table.getUniqueKeyIterator();					while ( subIter.hasNext() ) {						UniqueKey uk = (UniqueKey) subIter.next();						String constraintString = uk.sqlCreateString( dialect, mapping, defaultCatalog, defaultSchema );						if (constraintString != null) script.add( constraintString );					}				}				Iterator subIter = table.getIndexIterator();				while ( subIter.hasNext() ) {					Index index = (Index) subIter.next();					script.add(							index.sqlCreateString(									dialect,									mapping,									defaultCatalog,									defaultSchema								)						);				}				if ( dialect.hasAlterTable() ) {					subIter = table.getForeignKeyIterator();					while ( subIter.hasNext() ) {						ForeignKey fk = (ForeignKey) subIter.next();						if ( fk.isPhysicalConstraint() ) {							script.add(									fk.sqlCreateString(											dialect, mapping,											defaultCatalog,											defaultSchema										)								);						}					}				}			}		}		iter = iterateGenerators( dialect );		while ( iter.hasNext() ) {			String[] lines = ( (PersistentIdentifierGenerator) iter.next() ).sqlCreateStrings( dialect );			for ( int i = 0; i < lines.length ; i++ ) {				script.add( lines[i] );			}		}		Iterator itr = auxiliaryDatabaseObjects.iterator();		while ( itr.hasNext() ) {			AuxiliaryDatabaseObject object = (AuxiliaryDatabaseObject) itr.next();			if ( object.appliesToDialect( dialect ) ) {				script.add( object.sqlCreateString( dialect, mapping, defaultCatalog, defaultSchema ) );			}		}		return ArrayHelper.toStringArray( script );	}	/**	 * Generate DDL for altering tables	 *	 * @see org.hibernate.tool.hbm2ddl.SchemaUpdate	 */	public String[] generateSchemaUpdateScript(Dialect dialect, DatabaseMetadata databaseMetadata)			throws HibernateException {		secondPassCompile();		String defaultCatalog = properties.getProperty( Environment.DEFAULT_CATALOG );		String defaultSchema = properties.getProperty( Environment.DEFAULT_SCHEMA );		ArrayList script = new ArrayList( 50 );		Iterator iter = getTableMappings();		while ( iter.hasNext() ) {			Table table = (Table) iter.next();			if ( table.isPhysicalTable() ) {								TableMetadata tableInfo = databaseMetadata.getTableMetadata(						table.getName(),						( table.getSchema() == null ) ? defaultSchema : table.getSchema(),						( table.getCatalog() == null ) ? defaultCatalog : table.getCatalog(),								table.isQuoted()					);				if ( tableInfo == null ) {					script.add(							table.sqlCreateString(									dialect,									mapping,									defaultCatalog,									defaultSchema								)						);				}				else {					Iterator subiter = table.sqlAlterStrings(							dialect,							mapping,							tableInfo,							defaultCatalog,							defaultSchema						);					while ( subiter.hasNext() ) {						script.add( subiter.next() );					}				}				Iterator comments = table.sqlCommentStrings( dialect, defaultCatalog, defaultSchema );				while ( comments.hasNext() ) {					script.add( comments.next() );				}			}		}		iter = getTableMappings();		while ( iter.hasNext() ) {			Table table = (Table) iter.next();			if ( table.isPhysicalTable() ) {				TableMetadata tableInfo = databaseMetadata.getTableMetadata(						table.getName(),						table.getSchema(),						table.getCatalog(),						table.isQuoted()					);				if ( dialect.hasAlterTable() ) {					Iterator subIter = table.getForeignKeyIterator();					while ( subIter.hasNext() ) {						ForeignKey fk = (ForeignKey) subIter.next();						if ( fk.isPhysicalConstraint() ) {							boolean create = tableInfo == null || (									tableInfo.getForeignKeyMetadata( fk.getName() ) == null && (											//Icky workaround for MySQL bug:											!( dialect instanceof MySQLDialect ) ||													tableInfo.getIndexMetadata( fk.getName() ) == null										)								);							if ( create ) {								script.add(										fk.sqlCreateString(												dialect,												mapping,												defaultCatalog,												defaultSchema											)									);							}						}					}				}			}			/*//broken, 'cos we don't generate these with names in SchemaExport			subIter = table.getIndexIterator();			while ( subIter.hasNext() ) {				Index index = (Index) subIter.next();				if ( !index.isForeignKey() || !dialect.hasImplicitIndexForForeignKey() ) {					if ( tableInfo==null || tableInfo.getIndexMetadata( index.getFilterName() ) == null ) {						script.add( index.sqlCreateString(dialect, mapping) );					}				}			}			//broken, 'cos we don't generate these with names in SchemaExport			subIter = table.getUniqueKeyIterator();			while ( subIter.hasNext() ) {				UniqueKey uk = (UniqueKey) subIter.next();				if ( tableInfo==null || tableInfo.getIndexMetadata( uk.getFilterName() ) == null ) {					script.add( uk.sqlCreateString(dialect, mapping) );				}			}*/		}		iter = iterateGenerators( dialect );		while ( iter.hasNext() ) {			PersistentIdentifierGenerator generator = (PersistentIdentifierGenerator) iter.next();			Object key = generator.generatorKey();			if ( !databaseMetadata.isSequence( key ) && !databaseMetadata.isTable( key ) ) {				String[] lines = generator.sqlCreateStrings( dialect );				for ( int i = 0; i < lines.length ; i++ ) {					script.add( lines[i] );				}			}		}		return ArrayHelper.toStringArray( script );	}	public void validateSchema(Dialect dialect, DatabaseMetadata databaseMetadata)			throws HibernateException {		secondPassCompile();		String defaultCatalog = properties.getProperty( Environment.DEFAULT_CATALOG );		String defaultSchema = properties.getProperty( Environment.DEFAULT_SCHEMA );				Iterator iter = getTableMappings();		while ( iter.hasNext() ) {			Table table = (Table) iter.next();			if ( table.isPhysicalTable() ) {								TableMetadata tableInfo = databaseMetadata.getTableMetadata(						table.getName(),						( table.getSchema() == null ) ? defaultSchema : table.getSchema(),						( table.getCatalog() == null ) ? defaultCatalog : table.getCatalog(),								table.isQuoted());				if ( tableInfo == null ) {					throw new HibernateException( "Missing table: " + table.getName() );				}				else {					table.validateColumns( dialect, mapping, tableInfo );				}			}		}		iter = iterateGenerators( dialect );		while ( iter.hasNext() ) {			PersistentIdentifierGenerator generator = (PersistentIdentifierGenerator) iter.next();			Object key = generator.generatorKey();			if ( !databaseMetadata.isSequence( key ) && !databaseMetadata.isTable( key ) ) {				throw new HibernateException( "Missing sequence or table: " + key );			}		}	}	private void validate() throws MappingException {		Iterator iter = classes.values().iterator();		while ( iter.hasNext() ) {			( (PersistentClass) iter.next() ).validate( mapping );		}		iter = collections.values().iterator();		while ( iter.hasNext() ) {			( (Collection) iter.next() ).validate( mapping );		}	}	/**	 * Call this to ensure the mappings are fully compiled/built. Usefull to ensure getting	 * access to all information in the metamodel when calling e.g. getClassMappings().	 */	public void buildMappings() {		secondPassCompile();	}	// This method may be called many times!!	protected void secondPassCompile() throws MappingException {		log.debug( "processing extends queue" );		processExtendsQueue();		log.debug( "processing collection mappings" );		Iterator iter = secondPasses.iterator();		while ( iter.hasNext() ) {			SecondPass sp = (SecondPass) iter.next();			if ( ! (sp instanceof QuerySecondPass) ) {				sp.doSecondPass( classes );				iter.remove();			}		}		log.debug( "processing native query and ResultSetMapping mappings" );		iter = secondPasses.iterator();		while ( iter.hasNext() ) {			SecondPass sp = (SecondPass) iter.next();			sp.doSecondPass( classes );			iter.remove();		}		log.debug( "processing association property references" );		iter = propertyReferences.iterator();		while ( iter.hasNext() ) {			Mappings.PropertyReference upr = (Mappings.PropertyReference) iter.next();			PersistentClass clazz = getClassMapping( upr.referencedClass );			if ( clazz == null ) {				throw new MappingException(						"property-ref to unmapped class: " +						upr.referencedClass					);			}			Property prop = clazz.getReferencedProperty( upr.propertyName );			if ( upr.unique ) {				( (SimpleValue) prop.getValue() ).setAlternateUniqueKey( true );			}		}		//TODO: Somehow add the newly created foreign keys to the internal collection		log.debug( "processing foreign key constraints" );		iter = getTableMappings();		Set done = new HashSet();		while ( iter.hasNext() ) {			secondPassCompileForeignKeys( (Table) iter.next(), done );		}	}	/**	 * Try to empty the extends queue.	 */	private void processExtendsQueue() {		// todo : would love to have this work on a notification basis		//    where the successful binding of an entity/subclass would		//    emit a notification which the extendsQueue entries could		//    react to...		org.dom4j.Document document = findPossibleExtends();		while ( document != null ) {			add( document );			document = findPossibleExtends();		}		if ( extendsQueue.size() > 0 ) {//			Iterator iterator = extendsQueue.iterator();			Iterator iterator = extendsQueue.keySet().iterator();			StringBuffer buf = new StringBuffer( "Following superclasses referenced in extends not found: " );			while ( iterator.hasNext() ) {				final ExtendsQueueEntry entry = ( ExtendsQueueEntry ) iterator.next();				buf.append( entry.getExplicitName() );				if ( entry.getMappingPackage() != null ) {					buf.append( "[" ).append( entry.getMappingPackage() ).append( "]" );				}				if ( iterator.hasNext() ) {					buf.append( "," );				}			}			throw new MappingException( buf.toString() );		}	}	/**	 * Find the first possible element in the queue of extends.	 */	protected org.dom4j.Document findPossibleExtends() {//		Iterator iter = extendsQueue.iterator();		Iterator iter = extendsQueue.keySet().iterator();		while ( iter.hasNext() ) {			final ExtendsQueueEntry entry = ( ExtendsQueueEntry ) iter.next();			if ( getClassMapping( entry.getExplicitName() ) != null ) {				// found				iter.remove();				return entry.getDocument();			}			else if ( getClassMapping( HbmBinder.getClassName( entry.getExplicitName(), entry.getMappingPackage() ) ) != null ) {				// found				iter.remove();				return entry.getDocument();			}		}		return null;	}	protected void secondPassCompileForeignKeys(Table table, Set done) throws MappingException {		table.createForeignKeys();		Iterator iter = table.getForeignKeyIterator();		while ( iter.hasNext() ) {			ForeignKey fk = (ForeignKey) iter.next();			if ( !done.contains( fk ) ) {				done.add( fk );				final String referencedEntityName = fk.getReferencedEntityName();				if ( referencedEntityName == null ) {					throw new MappingException(							"An association from the table " +							fk.getTable().getName() +							" does not specify the referenced entity"						);				}				if ( log.isDebugEnabled() ) {					log.debug( "resolving reference to class: " + referencedEntityName );				}				PersistentClass referencedClass = (PersistentClass) classes.get( referencedEntityName );

⌨️ 快捷键说明

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