Grails Gorm: запросы с картой - PullRequest
       29

Grails Gorm: запросы с картой

3 голосов
/ 02 февраля 2012

Имея следующий класс домена:

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 ]

4 голосов
/ 02 февраля 2012

Я не думаю, что это возможно с 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 голос
/ 02 февраля 2012

Где wethod использует Groovy SQL, где у вас очень небольшое подмножество Groovy.Он отображает команды SQL, но позволяет элементам управления IDE свойства и правильно сформированный синтаксис.К сожалению, вы не можете написать все Groovy внутри (без функции, с несколькими операторами, без карты и т.

...