我有域类League
。每个联赛都有一个表示联赛高度的heightNumber
(例如:1 =“第一联赛,2 =”第二联赛”)和一个widthNumber
表示相同的高联赛。因此,可以说,高度为3且宽度为2的联赛为“3.League B”。一个联赛有0到16支球队。
我尝试找到具有免费团队位置best(min(heightNumber)
的min(widthNumber)) League
和(teams.size()<16)
def league = League.withCriteria(uniqueResult:true){
sizeLt("teams", 16)
and {
eq(heightNumber, min("heightNumber"))
eq(widthNumber, min("widthNumber"))
}
}
我知道上面的代码不会返回所需的联赛。
我的联赛网域类别:
class League {
String leagueName
int heightNumber
int widthNumber
static hasMany = [teams:Team]
static constraints = {
teams(size:0..16)
heightNumber min:1
widthNumber min:1
}
}
换句话说,我需要:
def leagues = League.withCriteria{
and {
order('heightNumber', 'asc')
order('widthNumber', 'asc')
}
}
for(League l : leagues){
if(l.teams.size()<16){
return l
}
}
该代码现在对我有效,但我认为这很不合适。
如果有人可以帮助我,那就太好了。
最佳答案
我建议使用更灵活的hql。我希望这对您有效,而不是经过测试:
League.executeQuery("select distinct l from League as l where (select min(heightNumber) from League) = l.heightNumber and (select min(widthNumber) from League) = l.widthNumber and l.teams < 16")
关于grails - 有关网域中listsize的Grails标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8379078/