2012-02-02 2 views
3

Имея следующий класс домена:Grails Горм: запросы с картой

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 
} 

ответ

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

1

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

Проверьте, пожалуйста, documentation.

+0

Я понимаю, но что делать запрос такой вещи? – tiktak