2012-02-02 37 views
3

具有以下域類:的Grails GORM:地圖查詢

class Word { 
    Map translations 
} 

和實例自舉:

def word1 = new Word().with{ 
    translations = [en:"game"] 
    save(failOnError: true, flush: true) 
} 

def word2 = new Word().with{ 
    translations = [en:"life"] 
    save(failOnError: true, flush: true) 
} 

什麼是常規的方式來獲得所有的字,其中翻譯與startPart在開始一些locale?例如:

def listWordsStartsWith(startPart, locale, params){ 
    def regexp = startPart+'%' 
    def query = Word.where { 
     //translations[locale] =~ regexp 
    } 
    def words = query.list(params) 
    words 
} 

回答

4

我不認爲GORM使用translations字段的集合值是可行的。我建議以下備用映射:

class Word { 
    static hasMany = [translations: Translation] 
} 
class Translation { 
    static belongsTo = Word 
    String key 
    String value 
} 

然後查詢將是這樣的:

Word.createCriteria().list { 
    translations { 
     like('key', startPart+'%') 
    } 
} 
+0

感謝您的想法。它應該是這樣的:http://pastie.org/3304152 – tiktak 2012-02-02 18:47:56

1

其中,wethod依賴於Groovy SQL,其中您有一個非常小的Groovy子集。它映射SQL命令,但允許對屬性和格式良好的語法進行IDE控制。 不幸的是,你不能編寫所有的Groovy(沒有函數,很少的操作符,沒有地圖等)。

檢查documentation以查看接受的內容。

+0

我理解,但什麼查詢做這樣的事情? – tiktak 2012-02-02 17:08:09