grails - 一对一求和

标签 grails sum gorm

我认为非常微不足道的东西需要帮助。

class User {
    String name 
    static hasMany = [files : File]
}

class File {
    long size
}

现在,当我需要给定用户拥有的所有文件的总大小时,可以使用以下有效的方法:
def user = User.get(id)
user.files.each(total+=it.size)

但是它有多丑,当我确定它可以通过简单的选择和查询(使用普通SQL或GORM / CRITERIA)完成时

我已经尝试过类似File.sumBySize ..()

要么
def c = File.createCriteria()
def f = c.list{
    eq("user",  user)   // What here ?
    projections
        {
        sum("size")
        }
    }   

我不知道如何指定在File类中没有定义但在Grails连接表中定义的parent(用户)关系

任何帮助表示赞赏

最佳答案

您可以使用HQL查询来完成此操作,但是“大小”字段的名称存在一个小问题
(似乎是保留字)。如果将其重命名为“length”,“fileSize”等,那么它将起作用:

User.executeQuery(
   'select sum(file.length) from User u join u.files file where u.id=:userId',
   [userId: id])[0]

关于grails - 一对一求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6945941/

相关文章:

grails - 如何在Grails 3项目中集成Grails 2插件?

R 在另一列中找到的聚合列的总和

r - 按行求和并选择特定列

grails - 如何使用动态查找器排除 GORM 的某些列?

security - 在 Groovy 动态 SQL 中检测 SQL 注入(inject)

grails - 为 UL LI 创建 Geb 模块

r - 在列中定义的窗口内求和

hibernate - GORM domain.delete(flush:true)不触发HibernateException或其他反馈?

grails - 的行为belongsTo

grails - 无法在grails中使用progresql