0

GORM には以下の例があります。

class Author {
    Map books // map of ISBN:book names
}

GORM がテーブルを作成すると、author_books、author_books_idx、author_books_elt の 3 つの列を持つテーブルが作成されます。

問題は、この 3 つの列のいずれにもインデックスが付けられておらず、テーブルにインデックスがないことです。MySQL で動作するか、SQL サーバーの場合があります。しかし、SQL Azure では、SQL Azure のすべてのテーブルにクラスター インデックスが必要なため、機能しません。これにより、そのようなテーブルに行を挿入できません。

そのような問題を修正するにはどうすればよいですか?既存の列にクラスター インデックスを追加するか、新しい秘密キー列を追加しても問題ないと思いますが、GORM に強制的にインデックスを作成させる方法がわかりません。

4

2 に答える 2

0

次のようなことができます。

import groovy.sql.Sql
import javax.sql.DataSource

class BootStrap {
    DataSource dataSource

    def init = { servletContext ->
        if (!Author.count()) {
            createIndexes();
        }
    }

    def destroy = {
    }

    private void createIndexes() {
        Sql sql = new Sql(dataSource)
        sql.execute("ALTER TABLE author [code for adding an index];")
    }

}

このファイル、'BootStrap.groovy' は、grails アプリケーションのディレクトリ/grails-app/conf にあります。このコードは、テーブル author が空 (初めて作成されたものなど) かどうかをチェックし、空である場合は、groovy.sql.Sql インスタンスを使用して SQL クエリでテーブルを変更できます。このようにして、インデックスを追加したり、列を追加したりできます...

于 2012-08-16T11:10:26.517 に答える
0

これを実現する 1 つの方法は、Bootstrap でインデックスを作成することです。データベース スキーマに対して行われたことを追跡するログ テーブルは、私が関与している 1 つのプロジェクトで有用であることが証明されています (スキーマは常に変更されます)。

于 2012-08-14T09:30:57.937 に答える