Grails:域类中的派生字段

时间:2011-09-27 09:16:52

标签: grails gorm derived

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

…
static hasMany = [ members:Member ];
…

现在假设我希望该分支的成员数量随时可用,以便将其显示在listview操作中,因此可能将该信息存储到域类中的变量中本身会是一个好主意吗?

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

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

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

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

基本上,我认为我正在寻找的是告诉grails某个变量是 派生 的某种方式,不应该被用户选择,而是每当更新必要。有这样的方式吗?

1 个答案:

答案 0 :(得分:2)

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

static transients = ['memberCount']

请参阅this page in the manual

此外,this StackOverflow question answers the same question


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