2012-08-14 16 views
0

GORM具有例如下面:對於GORM地圖類型,添加索引來通過GORM創建的表

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

當GORM創建表時,它會創建具有三個列的表:author_books,author_books_idx和author_books_elt

問題是這三列沒有索引,並且表沒有索引。它適用於MySQL,或者可能是sql服務器。但是在SQL Azure中,它不起作用,因爲SQL Azure中的所有表都應該有一個集羣索引,這使得我無法將行插入到這樣的表中。

如何解決此類問題?我認爲在現有的列上添加一個集羣索引或添加一個新的私鑰列應該沒問題,但我不知道如何強制GORM在其上創建索引。

回答

0

實現此目的的一種方法就是在Bootstrap中創建索引。一個日誌表跟蹤數據庫模式的事情,在我參與的一個項目中(模式不斷變化)證明是有用的。

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查詢更改表。這樣你就可以添加索引添加列等...