Grails 3 - 使用 Criteria 在字符串列表中查找字符串

Grails 3 - use Criteria to find string in list of strings

我有以下域 class 并且想要查找以组名开头(如果输入组名)并包含 groupStrings 之一(如果输入组字符串)的所有组:

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 + '%')
    }
}

这两个在尝试查找组字符串时都会产生错误。正确的语法是什么?

您的域有点奇怪。我会让两个域不只是一个。您需要一个组域和一个 GroupString 域。 Group 可以有一个 hasMany GroupString,而 GroupString 可以只是一个字符串,也许属于。我认为那将是通过查询来完成的唯一方法。 否则你可以获得所有组并执行 .find {closure}