对于GORM Map类型,将索引添加到GORM创建的表中

时间:2012-08-14 06:44:56

标签: grails gorm grails-domain-class

GORM有以下示例:

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

当GORM创建表时,它将创建一个包含三列的表:author_books,author_books_idx和author_books_elt

问题是这三列都没有被索引,并且表中没有索引。它适用于MySQL,或者可能是sql server。但是在SQL Azure中,它不起作用,因为SQL Azure中的所有表都应该有一个集群索引,这使得我无法在这样的表中插入行。

如何解决此类问题?我认为在现有列上添加集群索引或添加新的私钥列应该没问题,但我不知道如何强制GORM在其上创建索引。

2 个答案:

答案 0 :(得分:0)

实现此目的的一种方法是在Bootstrap中创建索引。在我参与的一个项目(模式不断变化)中,一个跟踪数据库模式所做事情的日志表已被证明是有用的。

答案 1 :(得分: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中。 此代码检查表作者是否为空(例如,第一次创建),如果是,则可以使用groovy.sql.Sql实例使用SQL查询更改表。这样你就可以添加索引添加列等......