为什么域类中的get-Property仅可用于Set和findAll?

时间:2011-01-20 09:13:11

标签: grails dns

DomainFooReward我添加了一个方法

int getQuantity() {
  FooRewardAssignment.countByReward(this)
}

GSP中的用法应为fooRewardInstance.quantity,但在启动时(在引导程序中)出现错误,并且发出没有找到setter方法的消息。

如果我将其更改为

Set<FooRewardAssignment> getListOfFoos() {
    FooRewardAssignment.findAllByReward(this)
}

并将GSP中的使用情况更改为badeRewardInstance.listOfFoos.size(),它可以正常显示特殊FooReward的分配频率。

知道版本1中有什么问题吗?

1 个答案:

答案 0 :(得分:5)

此问题的两种解决方法:

  1. 将返回值更改为def:

    def getQuantity() {    
       FooRewardAssignment.countByReward(this) 
    }
  2. 或者通过添加瞬态列表:

    static transients = ['quantity'] 
    int getQuantity() {
       FooRewardAssignment.countByReward(this) 
    }

  3. 有时GORM基于域类中的setter和getters方法在tabel中创建列。在这种情况下,GORM希望添加像'quantity'这样的列,但是会发生错误,因为GORM只能看到getter,而且看不到setter。所以我们可以说我们不想在数据库中创建这个列(静态瞬态)或者我们可以将返回值设置为def - 但是不要问我GORM没有考虑'def getters'的原因;)