?? configuration.java
字號:
} } return this; } /** * Read all mapping documents from a directory tree. Assume that any * file named <tt>*.hbm.xml</tt> is a mapping document. * @param dir a directory */ public Configuration addDirectory(File dir) throws MappingException { File[] files = dir.listFiles(); for ( int i=0; i<files.length; i++ ) { if ( files[i].isDirectory() ) { addDirectory( files[i] ); } else if ( files[i].getName().endsWith(".hbm.xml") ){ addFile( files[i] ); } } return this; } private Iterator iterateGenerators(Dialect dialect) throws MappingException { HashMap generators = new HashMap(); Iterator iter = classes.values().iterator(); while ( iter.hasNext() ) { IdentifierGenerator ig = ( (PersistentClass) iter.next() ).getIdentifier().createIdentifierGenerator(dialect); if ( ig instanceof PersistentIdentifierGenerator ) generators.put( ( (PersistentIdentifierGenerator) ig ).generatorKey(), ig ); } return generators.values().iterator(); } /** * Generate DDL for dropping tables * @see net.sf.hibernate.tool.hbm2ddl.SchemaExport */ public String[] generateDropSchemaScript(Dialect dialect) throws HibernateException { secondPassCompile(); ArrayList script = new ArrayList(50); if ( dialect.dropConstraints() ) { Iterator iter = getTableMappings(); while ( iter.hasNext() ) { Table table = (Table) iter.next(); Iterator subIter = table.getForeignKeyIterator(); while ( subIter.hasNext() ) { ForeignKey fk = (ForeignKey) subIter.next(); script.add( fk.sqlDropString(dialect) ); } } } Iterator iter = getTableMappings(); while ( iter.hasNext() ) { Table table = (Table) iter.next(); /*Iterator subIter = table.getIndexIterator(); while ( subIter.hasNext() ) { Index index = (Index) subIter.next(); if ( !index.isForeignKey() || !dialect.hasImplicitIndexForForeignKey() ) { script.add( index.sqlDropString(dialect) ); } }*/ script.add( table.sqlDropString(dialect) ); } iter = iterateGenerators(dialect); while ( iter.hasNext() ) { String dropString = ( (PersistentIdentifierGenerator) iter.next() ).sqlDropString(dialect); if (dropString!=null) script.add(dropString); } return ArrayHelper.toStringArray(script); } /** * Generate DDL for creating tables * @see net.sf.hibernate.tool.hbm2ddl.SchemaExport */ public String[] generateSchemaCreationScript(Dialect dialect) throws HibernateException { secondPassCompile(); ArrayList script = new ArrayList(50); Iterator iter = getTableMappings(); while ( iter.hasNext() ) { Table table = (Table) iter.next(); script.add( table.sqlCreateString(dialect, mapping) ); } iter = getTableMappings(); while ( iter.hasNext() ) { Table table = (Table) iter.next(); Iterator subIter = table.getIndexIterator(); while ( subIter.hasNext() ) { Index index = (Index) subIter.next(); script.add( index.sqlCreateString(dialect, mapping) ); } if ( dialect.hasAlterTable() ) { subIter = table.getForeignKeyIterator(); while ( subIter.hasNext() ) { ForeignKey fk = (ForeignKey) subIter.next(); script.add( fk.sqlCreateString(dialect, mapping) ); } } } 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] ); } return ArrayHelper.toStringArray(script); } /** * Generate DDL for altering tables * @see net.sf.hibernate.tool.hbm2ddl.SchemaUpdate */ public String[] generateSchemaUpdateScript(Dialect dialect, DatabaseMetadata databaseMetadata) throws HibernateException { secondPassCompile(); ArrayList script = new ArrayList(50); Iterator iter = getTableMappings(); while ( iter.hasNext() ) { Table table = (Table) iter.next(); TableMetadata tableInfo = databaseMetadata.getTableMetadata( table.getName() ); if (tableInfo==null) { script.add( table.sqlCreateString(dialect, mapping) ); } else { Iterator subiter = table.sqlAlterStrings(dialect, mapping, tableInfo); while ( subiter.hasNext() ) script.add( subiter.next() ); } } iter = getTableMappings(); while ( iter.hasNext() ) { Table table = (Table) iter.next(); TableMetadata tableInfo = databaseMetadata.getTableMetadata( table.getName() ); Iterator subIter; if ( dialect.hasAlterTable() ) { subIter = table.getForeignKeyIterator(); while ( subIter.hasNext() ) { ForeignKey fk = (ForeignKey) subIter.next(); if ( tableInfo==null || tableInfo.getForeignKeyMetadata( fk.getName() ) == null ) { script.add( fk.sqlCreateString(dialect, mapping) ); } } } /*//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.getName() ) == 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.getName() ) == 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); } 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); } // This method may be called many times!! private void secondPassCompile() throws MappingException { log.info("processing one-to-many association mappings"); Iterator iter = secondPasses.iterator(); while ( iter.hasNext() ) { Binder.SecondPass sp = (Binder.SecondPass) iter.next(); sp.doSecondPass(classes); iter.remove(); } log.info("processing one-to-one association property references"); iter = propertyReferences.iterator(); while ( iter.hasNext() ) { Mappings.UniquePropertyReference upr = (Mappings.UniquePropertyReference) iter.next(); PersistentClass clazz = getClassMapping(upr.referencedClass); if (clazz==null) throw new MappingException( "property-ref to unmapped class: " + upr.referencedClass.getName() ); boolean found = false; Iterator propIter = clazz.getPropertyIterator(); while ( propIter.hasNext() ) { Property prop = (Property) propIter.next(); if ( upr.propertyName.equals( prop.getName() ) ) { ( (SimpleValue) prop.getValue() ).setUnique(true); found = true; break; } } if (!found) throw new MappingException( "property-ref not found: " + upr.propertyName + " in class: " + upr.referencedClass.getName() ); } //TODO: Somehow add the newly created foreign keys to the internal collection log.info("processing foreign key constraints"); iter = getTableMappings(); while ( iter.hasNext() ) { Table table = (Table) iter.next(); Iterator subIter = table.getForeignKeyIterator(); while ( subIter.hasNext() ) { ForeignKey fk = (ForeignKey) subIter.next(); if ( fk.getReferencedTable() == null ) { if ( log.isDebugEnabled() ) log.debug( "resolving reference to class: " + fk.getReferencedClass().getName() ); PersistentClass referencedClass = (PersistentClass) classes.get( fk.getReferencedClass() ); if (referencedClass == null) throw new MappingException( "An association from the table " + fk.getTable().getName() + " refers to an unmapped class: " + fk.getReferencedClass().getName() ); fk.setReferencedTable( referencedClass.getTable() ); } } } } /** * Get the named queries */ public Map getNamedQueries() { return namedQueries; } private static final Interceptor EMPTY_INTERCEPTOR = new EmptyInterceptor(); static final class EmptyInterceptor implements Interceptor, Serializable { /** * @see net.sf.hibernate.Interceptor#onDelete(Object, Serializable id, Object[], String[], Type[]) */ public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { } /** * @see net.sf.hibernate.Interceptor#onFlushDirty(Object, Serializable, Object[], Object[], String[], Type[]) */ public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) { return false; } /** * @see net.sf.hibernate.Interceptor#onLoad(Object, Serializable, Object[], String[], Type[]) */ public boolean onLoad(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { return false; } /** * @see net.sf.hibernate.Interceptor#onSave(Object, Serializable, Object[], String[], Type[]) */ public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { return false; } /** * @see net.sf.hibernate.Interceptor#postFlush(Iterator) */ public void postFlush(Iterator entities) { } /** * @see net.sf.hibernate.Interceptor#preFlush(Iterator) */ public void preFlush(Iterator entities) { } /** * @see net.sf.hibernate.Interceptor#isUnsaved(java.lang.Object) */ public Boolean isUnsaved(Object entity) { return null; } /** * @see net.sf.hibernate.Interceptor#instantiate(java.lang.Class, java.io.Serializable) */ public Object instantiate(Class clazz, Serializable id) { return null; } /** * @see net.sf.hibernate.Interceptor#findDirty(Object, Serializable, Object[], Object[], String[], Type[]) */ public int[] findDirty( Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) { return null; } } /** * Instantiate a new <tt>SessionFactory</tt>, using the properties and * mappings in this configuration. The <tt>SessionFactory</tt> will be * immutable, so changes made to the <tt>Configuration</tt> after * building the <tt>SessionFactory</tt> will not affect it. * * @see net.sf.hibernate.SessionFactory * @return a new factory for <tt>Session</tt>s */ public SessionFactory buildSessionFactory() throws HibernateException { secondPassCompile(); validate(); Environment.verifyProperties(properties); Properties copy = new Properties(); copy.putAll(properties); Settings settings = buildSettings(); configureCaches(settings); return new SessionFactoryImpl(this, settings); } /** * Return the configured <tt>Interceptor</tt> */ public Interceptor getInterceptor() { return interceptor; } /** * Get all properties */ public Properties getProperties() { return properties; }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -