0

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 在其上创建索引。

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

于 2012-08-16T11:10:26.517 回答
0

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

于 2012-08-14T09:30:57.937 回答