スキーマのエクスポートで使用される命名と矛盾しているように見えるため、スキーマの更新時のインデックスの作成は、Hibernate で意図的に無効にされました。
これは、 class にあるコメント付きのコードです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 の最近のバージョンでは、最初の部分 (テーブル インデックス) のコメントは公式バージョンでも削除されましたが、2 番目の部分 (一意のキーを実装するインデックス) はまだコメントされています。http://opensource.atlassian.com/projects/hibernate/browse/HHH-1012のディスカッションを参照してください。