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

Grails 对于GORM映射类型,将索引添加到GORM创建的表中,grails,gorm,grails-domain-class,Grails,Gorm,Grails Domain Class,GORM有以下示例: class Author { Map books // map of ISBN:book names } 当GORM创建表格时,它将创建一个包含三列的表格:author\u books、author\u books\u idx和author\u books\u elt 问题是这三列都没有索引,而且表上也没有索引。它可以在MySQL上工作,也可以是sql server。但在sqlazure中,它不起作用,因为sqlazure中的所有表都应该有一个集群索引,这使得我不

GORM有以下示例:

class Author {
    Map books // map of ISBN:book names
}
当GORM创建表格时,它将创建一个包含三列的表格:author\u books、author\u books\u idx和author\u books\u elt

问题是这三列都没有索引,而且表上也没有索引。它可以在MySQL上工作,也可以是sql server。但在sqlazure中,它不起作用,因为sqlazure中的所有表都应该有一个集群索引,这使得我不能向这样的表插入行


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

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

您可以这样做:

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查询更改表。这样,您就可以添加索引、添加列等