Создание индекса при обновлении схемы было преднамеренно отключено в Hibernate, потому что оно казалось несовместимым с именами, используемыми в экспорте схемы.
Это закомментированный код, который вы можете найти в классе org.hibernate.cfg.Configuration
.
//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) );
}
}
Обычно я удаляю этот комментарий, перекомпилирую Hibernate.jar и создаю индексы при обновлении схемы без каких-либо проблем, по крайней мере с Oracle DB.
В последних версиях Hibernate комментарийпервая часть (табличные индексы) также была удалена в официальной версии, в то время как вторая часть все еще комментирована (индексы, которые реализуют уникальные ключи).Смотрите обсуждение на http://opensource.atlassian.com/projects/hibernate/browse/HHH-1012