Grails 为什么域类中的get属性只能用于Set和findAll?

Grails 为什么域类中的get属性只能用于Set和findAll?,grails,dns,Grails,Dns,在DomainclassFooReward中,我添加了一个方法 int getQuantity() { FooRewardAssignment.countByReward(this) } GSP中的用法应该是fooRewardInstance.quantity,但启动时(在引导过程中)会出现错误,并显示未找到setter方法的消息 如果我把它改成 Set<FooRewardAssignment> getListOfFoos() { FooRewardAssignment

Domain
class
FooReward
中,我添加了一个方法

int getQuantity() {
  FooRewardAssignment.countByReward(this)
}
GSP中的用法应该是
fooRewardInstance.quantity
,但启动时(在引导过程中)会出现错误,并显示未找到setter方法的消息

如果我把它改成

Set<FooRewardAssignment> getListOfFoos() {
    FooRewardAssignment.findAllByReward(this)
}
Set getListofoos(){
FooRewardAssignment.findallbyeward(此)
}
并将GSP中的用法更改为
badeRewardInstance.listofoos.size()
,它可以工作并向我显示分配特殊
FooReward
的频率


知道版本1中的错误是什么吗?

此问题有两种解决方法:

  • 将返回值更改为def:

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

    static transients=['quantity']
    int getQuantity(){
    FooRewardAssignment.CountByWard(此)
    }


  • 有时GORM在域类中基于setters和getter方法在tabel中创建列。在这种情况下,GORM希望添加类似“quantity”的列,但出现错误是因为GORM只看到getter,而没有看到setter。所以我们可以说我们不想在数据库中创建这个列(静态瞬态),或者我们可以将返回值设置为def-但不要问我为什么GORM不考虑“def getter;”)

    此问题有两种解决方法:

  • 将返回值更改为def:

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

    static transients=['quantity']
    int getQuantity(){
    FooRewardAssignment.CountByWard(此)
    }


  • 有时GORM在域类中基于setters和getter方法在tabel中创建列。在这种情况下,GORM希望添加类似“quantity”的列,但出现错误是因为GORM只看到getter,而没有看到setter。所以我们可以说我们不想在数据库中创建这个列(静态瞬态),或者我们可以将返回值设置为def-但不要问我为什么GORM不考虑“def getter;”)

    引导时错误的详细信息是什么?它不应该因为gsp问题而出错。引导时错误的详细信息是什么?它不应该因为gsp问题而出错。忽略“def”getter是因为Hibernate需要知道Java类型才能知道要使用的数据库类型。所以Grails忽略“def”getter,因为def是对象的别名。我的偏好是强类型并添加到瞬态中,因为它更具有自文档性。忽略“def”getter是因为Hibernate需要知道Java类型才能知道使用哪种数据库类型。所以Grails忽略“def”getter,因为def是对象的别名。我的偏好是强烈地键入它并添加到瞬态中,因为它更能自我记录。