【问题标题】:Grails: derived fields in domain classesGrails:领域类中的派生字段
【发布时间】:2011-09-27 09:16:51
【问题描述】:

假设我有一个域类branch,它有几个成员:

…
static hasMany = [ members:Member ];
…

现在假设我想让该分支的成员数量随时可用,使其显示在listview 操作中,因此也许将该信息存储到域类本身的变量中将是好主意?

…
Integer memberCount = members.size();
static constraints = {
    memberCount(editable:false);
}
…

(这是正确的语法吗?) 编辑:这不是正确的语法。我无法评估成员列表的大小,因为它还不存在,而且 grails 会抱怨 size() 不适用于空对象。我还能尝试什么?

但是,由于memberCount 现在是域类中的一个变量,因此可以在创建Branch 时为其分配一个值(这是违反直觉的),并且它不会自动更新一次添加了新的Member

当然可以以不同的方式达到预期的结果。我可以在/Branch 目录中操作view.gsplist.gsp,在那里添加一些额外的<td>s 等等。但这对我来说似乎不是很优雅。

基本上,我认为我正在寻找某种方法来告诉 grails 某个变量是派生的,不应由用户设置,而是随时更新必要的。有没有这样的方法?

【问题讨论】:

    标签: grails grails-orm derived


    【解决方案1】:

    您可以将不希望保留的任何属性添加到 transients 静态列表中:

    static transients = ['memberCount']
    

    this page in the manual

    另外,this StackOverflow question answers the same question


    此外,执行派生属性的更好方法可能是使用Derived Properties feature of GORM

    【讨论】:

    • 如果memberCount属性在transients列表中,它就不会存储在数据库中。但是一旦添加了新的Member,它会更新吗?在我看来,我将不得不使用您链接的 GORM 的派生属性功能。
    猜你喜欢
    • 2011-12-23
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 2010-10-13
    相关资源
    最近更新 更多