12

我正在 Grails 中创建一个版本控制域类:

class VersionControl {

    Date dateCreated
    Long versionNumber

    Long getLatestVersionNumber() {
        //return largest versionNumber
    }

}

我想添加一个查询来获取存储的最大版本号:

Long getLatestVersionNumber()

在 SQL 中,此查询或多或少如下所示:

SELECT TOP 1 MAX(versionNumber) FROM VersionControl

该函数必须以 long 形式返回值。

在 Grails 中执行此操作的正确方法是什么?

4

4 回答 4

32

您可以使用GORM 标准,使用投影进行查询:

VersionControl.createCriteria().get {
    projections {
        max "versionNumber"
    }
} as Long
于 2012-10-08T14:11:58.330 回答
6
VersionControl.executeQuery("select max(versionNumber) from VersionControl")

这对我来说更容易理解。

于 2015-02-21T06:43:43.327 回答
0

VersionControl.find("来自 VersionControl vc max(vc.versionNumber)")

于 2012-10-08T14:08:48.883 回答
0

要在查询中计算最大值,我认为最好的是条件选项:

def maxVersion = VersionControl.withCriteria {
    projections{
        max 'versionNumber'
    }

}

如果你想添加一个 groupby 修饰符,只需在 projections 闭包中添加一个新行,如下所示:

VersionControl.withCriteria {
    projections{
        avg 'score'
        groupProperty 'channelId'
    }

}
于 2016-07-04T09:55:07.530 回答