Grails域名列表大小的标准



我有域类League。每个联赛都有一个代表联赛高度的heightNumber(例如:1 ="第一联赛,2 ="第二联赛")和一个代表相同高度联赛的widthNumber。假设一个高3宽2的联赛可以看成是"3"。联赛B"。A联赛有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"))
    }
}

我知道上面的代码不会返回期望的联赛。

My League Domainclass:

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")

我不是100%确定你到底想做什么,但也许这可以帮助:这里是一个查询,输出联赛最小的widthNumber,在所有联赛中,有最小的heightNumber

League.find("from League as l
             where l.teams < 16 and
                   l.heightNumber = (select min(heightNumber)
                                     from League)
             order by l.widthNumber asc")

使用条件执行此操作涉及子查询,这有点冗长,因为Grails标准DSL不支持子查询。

最新更新