2016-05-02 12 views
0

Hibernateを使用するエンティティとしてモデル化された2つのテーブルAとBを持つシンプルなデータベーススキーマがあります。 Bの各行には、Aの行を一意に識別する外部キーがあります。Hibernateで外部キーのインデックスを有効または無効にする

私は、Postgresをデータベースとして使用すると、デフォルトで外部キー用のインデックスは作成されないことに気付きました。私はたくさんの行と削除カスケードを設定しているので、JPA @Indexアノテーションを使うようにHibernateエンティティを設定することにしました。うまくいき、インデックスが作成されているのがわかります。

しかし、何らかの理由で私は別のデータベースバックエンド:HSQLDBに切り替える必要がありました。インデックスを作成するためのJPAアノテーションは考慮されていますが、HSQLDBは​​デフォルトですべての外部キーのインデックスを作成するので、最終的に同じカラムに対して2つのインデックスがあります。

外部キーのインデックスの作成がデータベースプロバイダ固有であることを読んでいます(たとえば、OracleとPostgresはインデックスを作成しませんが、MySQLとHSQLDBは​​そうします)。

プロバイダが何であれ、外部キーのインデックスの作成を有効/無効にする方法があるのでしょうか?それ以外の場合は、二重インデックスに対処する必要があるようです。

どんなアイデア、コメント、提案も大歓迎です。

答えて

1

私も同様の状況にありますが、私たちの製品はさまざまなrdbms(firebird、mssql、oracle、db2)をサポートしなければなりません。すべてのrdbmsのすべての外部キーのインデックスを作成するだけです。 大きなプロジェクトの場合は、データベース設定用のhibernates hbm2ddl機能に依存しないこともお勧めします。 flywayやliquibaseのようなソリューションは、(あなたが書いて保守しなければならない追加のコードの価格ではあるが)あなたのddlをよりコントロールします。

1

ソースコードをダウンロードして自分で調整しない限り、これをHSQLDBで変更することはできません。 HSQLDB docsから

HSQLDBは​​PRIMARY KEY、UNIQUEとFOREIGN KEY制約をサポートするために、内部的にインデックスを作成します:ユニークなインデックスが各PRIMARY KEYまたはUNIQUE制約のために作成されます。 FOREIGN KEY制約ごとに通常の索引が作成されます。このため、これらの制約でカバーされる同じ列セットに重複したユーザー定義索引を作成しないでください。

+0

ありがとうございます。それは私の問題です。少なくとも同じカラムの2つのインデックスを避けるために、Hibernateレベルでそれを設定する方法があるのだろうかと思います。残念ながら、_lumue_答えに基づいて、それは不可能であるように見えます。 – Laurent

関連する問題