From: <epb...@us...> - 2006-02-17 18:47:21
|
Update of /cvsroot/hibernate/HibernateExt/metadata/src/java/org/hibernate/cfg In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15783/metadata/src/java/org/hibernate/cfg Modified Files: AnnotationBinder.java Ejb3Column.java IndexSecondPass.java Log Message: ANN-241 Index: AnnotationBinder.java =================================================================== RCS file: /cvsroot/hibernate/HibernateExt/metadata/src/java/org/hibernate/cfg/AnnotationBinder.java,v retrieving revision 1.176 retrieving revision 1.177 diff -u -d -r1.176 -r1.177 --- AnnotationBinder.java 14 Feb 2006 18:40:31 -0000 1.176 +++ AnnotationBinder.java 17 Feb 2006 18:47:18 -0000 1.177 @@ -1000,8 +1000,15 @@ //init index Index index = property.getAnnotation( Index.class ); if ( index != null ) { - for ( Ejb3Column column : columns ) { - column.addIndex( index ); + if (joinColumns != null) { + for ( Ejb3Column column : joinColumns ) { + column.addIndex( index ); + } + } + else { + for ( Ejb3Column column : columns ) { + column.addIndex( index ); + } } } Index: Ejb3Column.java =================================================================== RCS file: /cvsroot/hibernate/HibernateExt/metadata/src/java/org/hibernate/cfg/Ejb3Column.java,v retrieving revision 1.37 retrieving revision 1.38 diff -u -d -r1.37 -r1.38 --- Ejb3Column.java 13 Feb 2006 19:14:35 -0000 1.37 +++ Ejb3Column.java 17 Feb 2006 18:47:18 -0000 1.38 @@ -9,7 +9,6 @@ import org.hibernate.AssertionFailure; import org.hibernate.annotations.Index; import org.hibernate.cfg.annotations.Nullability; -import org.hibernate.cfg.annotations.TableBinder; import org.hibernate.mapping.Column; import org.hibernate.mapping.Formula; import org.hibernate.mapping.Join; @@ -429,20 +428,8 @@ public void addIndex(Index index) { if ( index == null ) return; - if ( mappingColumn == null ) { - throw new AnnotationException( "Index on formula not allowed: " + propertyHolder.getEntityName() ); - } - Table table; - if ( StringHelper.isEmpty( secondaryTableName ) ) { - table = propertyHolder.getPersistentClass() - .getRootTable(); - // .getOrCreateIndex( index.name() ) - // .addColumn( mappingColumn ); - } - else { - table = getJoin().getTable(); - //.getOrCreateIndex( index.name() ).addColumn( mappingColumn ); - } - TableBinder.addIndexes( table, new Index[] { index }, mappings ); + mappings.addSecondPass( + new IndexSecondPass( index.name(), this, mappings ) + ); } } \ No newline at end of file Index: IndexSecondPass.java =================================================================== RCS file: /cvsroot/hibernate/HibernateExt/metadata/src/java/org/hibernate/cfg/IndexSecondPass.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- IndexSecondPass.java 11 Nov 2005 00:03:10 -0000 1.2 +++ IndexSecondPass.java 17 Feb 2006 18:47:18 -0000 1.3 @@ -3,37 +3,57 @@ import java.util.Map; -import org.hibernate.MappingException; import org.hibernate.AnnotationException; -import org.hibernate.mapping.Table; +import org.hibernate.MappingException; import org.hibernate.mapping.Column; +import org.hibernate.mapping.Table; /** * @author Emmanuel Bernard */ public class IndexSecondPass implements SecondPass { - private final Table table; + private Table table; private final String indexName; private final String[] columns; - private ExtendedMappings mappings; + private final ExtendedMappings mappings; + private final Ejb3Column column; public IndexSecondPass(Table table, String indexName, String[] columns, ExtendedMappings mappings) { this.table = table; this.indexName = indexName; this.columns = columns; this.mappings = mappings; + this.column = null; } + + public IndexSecondPass(String indexName, Ejb3Column column, ExtendedMappings mappings) { + this.indexName = indexName; + this.column = column; + this.columns = null; + this.mappings = mappings; + } + public void doSecondPass(Map persistentClasses, Map inheritedMetas) throws MappingException { - for ( String columnName : columns) { - Column column = table.getColumn( new Column( - mappings.getPhysicalColumnName( columnName, table ) - ) ); - if ( column == null ) { - throw new AnnotationException( - "@Index references a unknown column: " + columnName - ); + if (columns != null) { + for ( String columnName : columns) { + addIndexToColumn( columnName ); } - table.getOrCreateIndex( indexName ).addColumn( column ); } + if (column != null) { + this.table = column.getTable(); + addIndexToColumn( column.getName() ); + } + } + + private void addIndexToColumn(String columnName) { + Column column = table.getColumn( new Column( + mappings.getPhysicalColumnName( columnName, table ) + ) ); + if ( column == null ) { + throw new AnnotationException( + "@Index references a unknown column: " + columnName + ); + } + table.getOrCreateIndex( indexName ).addColumn( column ); } } |