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在其上创建索引。
答案 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查询更改表。这样你就可以添加索引添加列等......