2016-12-01 7 views
0

У меня есть следующий класс домена и вы хотите найти все группы, начинающиеся с имени группы (если имя группы введено) и содержат одну из группStrings (if строка группы вводится):Grails 3 - использование критериев для поиска строки в списке строк

class Group { 
    String name 
    List groupStrings 
    static hasMany = [ 
     groupStrings : String 
    ] 
} 

Я пробовал:

String groupNameToFind = ... 
String groupStringToFind = ... 

List<Long> groupIds = Group.createCriteria().listDistinct() { 
    projections { 
     property 'id' 
    } 
    if(groupNameToFind) { 
     ilike('name', groupNameToFind + '%') 
    } 
    if(groupStringToFind) { 
     eq('groupStrings', groupStringToFind) 
    } 
} 

Я также попытался:

List<Long> groupIds = Group.createCriteria().listDistinct() { 
    projections { 
     property 'id' 
    } 
    if(groupStringToFind) { 
     createAlias('groupStrings', 'gs', JoinType.LEFT_OUTER_JOIN) 
     eq('gs', groupStringToFind) 
    } 
    if(groupNameToFind) { 
     ilike('name', groupNameToFind + '%') 
    } 
} 

Оба они создают ошибку при попытке найти групповую строку. Каков правильный синтаксис?

ответ

0

Ваши домены немного странные. Я бы сделал два домена не один. Вам нужен домен группы и домен GroupString. Группа может иметь hasMany GroupString, а GroupString может быть просто строкой и, возможно, принадлежит. Я думаю, что это был бы единственный способ сделать это через запрос. В противном случае вы можете получить все группы и выполнить .find {укупорка}

 Смежные вопросы

  • Нет связанных вопросов^_^