Grails getter 写入数据库?

标签 grails grails-orm grails-2.0

我遇到了一些我没有预料到的行为。我有一个具有状态的对象。该对象有两种状态:进行中和关闭。当对象正在进行时,我希望计算状态而不是将其保存在数据库中...但是,一旦我将其关闭/最终确定,就需要保存状态。

以下是我尝试设置的方法:

class Assessment{
  AssessmentStatus status
  List<Score> scores
  static hasMany = [scores: Score]


  AssessmentStatus getStatus() {

    if(status){
      return status
    }

    if (!scores || event.eventDateTime.after(new Date())) {
      return AssessmentStatus.PRE_EVENT
    }

    scores.each{ 
      if (it.incompleteReason){
        return AssessmentStatus.INCOMPLETE
      }
    }

    if (!getPassing()) {
      return AssessmentStatus.FAIL
    }

    return AssessmentStatus.PASS
  }

  Boolean getPassing() {
    def passing = Boolean.TRUE
    this.scores.each {score ->
      if (!score.passingScore){
        passing = Boolean.FALSE
      }
    }
    return passing
  }
}

正如您所看到的代码,我希望检查我希望检查状态是否为空。如果状态不为空则返回它。如果为空,则进行其他计算。但是......由于某种原因,计算出的状态被保存到数据库中。现在我知道我可以随时进去添加:

if(finalized){
  return status
}

VS if(status) 我会得到正确的返回。但是...我不希望数据库中存在垃圾数据。另一种方法是不重写 getter...

我的问题基本上可以归结为。为什么要重写 getter 写入数据库以及有解决方法吗?

最佳答案

除非您明确定义,否则所有字段都会保留到数据库中。您重写 getter 的事实并不会自动告诉 Grails 您不希望将该属性保留到数据库中。为此,您必须将该属性定义为 transient :

  static transients = ['status']

关于Grails getter 写入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24121294/

相关文章:

grails 在没有数据库支持的情况下从 bootstrap.groovy 填充 Controller 模型

spring - 无法在 Grails 3 中动态配置支持 GORM 的数据源

oracle - 如何在Grails中左右联接标准查询

java - 在 Grails 中使用 JPA 域类

grails - 保存新的域对象会导致立即刷新

Grails + 斯波克 : NullPointerException when doing addTo* on an embedded hasMany field

Grails 资源 : Bundle multiple modules to single file

grails - 在Grails中强制使用https

grails - 尝试运行应用程序时,Tomcat ClassNotFound异常

grails - 从gsp访问Grails Domain类上的静态映射内容