2011-09-04 36 views
2

我有一個聲明這樣一個Grails 1.3.7域類:即生成這個樣子的Grails中指定地圖採集的字段大小DOM

class Document { 
    String url 

    Map metadata = new HashMap() 

    static constraints = { 
     url(nullable:false, blank: false, maxSize: 2048) 
     metadata() 
    } 
} 

的模式:

+-------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+-------------+--------------+------+-----+---------+----------------+ 
| id   | bigint(20) | NO | PRI | NULL | auto_increment | 
| url   | longtext  | NO |  | NULL |    | 
+-------------+--------------+------+-----+---------+----------------+ 

+--------------+--------------+------+-----+---------+-------+ 
| Field  | Type   | Null | Key | Default | Extra | 
+--------------+--------------+------+-----+---------+-------+ 
| metadata  | bigint(20) | YES |  | NULL |  | 
| metadata_idx | varchar(255) | YES |  | NULL |  | 
| metadata_elt | varchar(255) | NO |  | NULL |  | 
+--------------+--------------+------+-----+---------+-------+ 

我想知道如何爲document_metadata表指定不同的類型(特別是不同的大小)。我希望能夠存儲超過255個字符的字符串。我在網上找不到任何相關文檔,可能是因爲我無法提出任何好的關鍵字。地圖和集合是非常通用的術語!

感謝,

基因

回答

2

你要能夠影響DDL爲您的「元數據」的唯一方法是讓一個具體的領域類。使用HashMap不會給你這樣做的能力。

+0

該死!我希望有一些神奇的屬性可以在映射中指定,以影響'document_metadata'表的聲明方式。 –

+0

但是,你可以做的唯一的「魔法」是爲Hibernate提供一個HashMap類型的自定義處理程序,然而,這將適用於所有哈希映射(包括由GORM用來管理關係的哈希映射)。 –

2

只要將sql alter命令運行到數據庫將會非常簡單。這個alter命令的一個好地方是BootStrap和一些檢查表列定義是否正確的邏輯。 Grails不會觸及已經創建的列。

+1

這個問題剛剛出現給我,當我做了一個手動的'ALTER TABLE'命令時,你的解決方案就像一個魅力一樣;不太清楚如何以獨立於DB的方式在Bootstrap中實現此功能。 –