grails - 有关网域中listsize的Grails标准

标签 grails group-by criteria

我有域类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/

相关文章:

grails - 是否可以在 Grails 中运行测试类的单个测试?

Grails Controller 的 Java 时间转换

c# - 具有多个级别的对象上的 LINQ GroupBy

mysql - 搜索并返回与组中搜索匹配的行

java - Hibernate 标准选择值是列值的前 5 个字符的所有行

grails - 跨 Controller 操作的文件上传对象

grails - Grails仅返回实体的ID

mysql - 在一个查询中,对所有数据进行求和,但对唯一数据进行计数

java - 在java标准谓词中使用 native sql

java - JPA:使用 criteriabuilder 查找实体:属性名称与注释不同?