Grails gorm:用map查询

时间:2012-02-02 16:33:55

标签: grails groovy map gorm

拥有以下域类:

class Word {
    Map translations
}

BootStrap中的实例:

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
}

2 个答案:

答案 0 :(得分: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+'%')
    }
}

答案 1 :(得分:1)

wethod依赖于Groovy SQL,其中有一个非常小的Groovy子集。它映射SQL命令,但允许对属性和格式良好的语法进行IDE控制。 不幸的是,你不能在里面写所有的Groovy(没有函数,很少有运算符,没有地图等)。

检查documentation以查看接受的内容。