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

时间:2016-12-01 19:33:58

标签: hibernate grails gorm hibernate-5.x

我有以下域类,并希望查找以组名开头的所有组(如果输入了组名)并包含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 + '%')
    }
}

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

1 个答案:

答案 0 :(得分:0)

您的域名有点奇怪。我会创建两个域而不仅仅是一个域。您需要一个组域和一个GroupString域。该组可以有一个hasMany GroupString,GroupString可以只是一个字符串,也许属于。我认为这是通过查询来实现它的唯一方法。 否则你可以获得所有组并执行.find {closure}