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}
我有以下域 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}