我遇到了一些我没有预料到的行为。我有一个具有状态
的对象。该对象有两种状态:进行中和关闭。当对象正在进行时,我希望计算状态而不是将其保存在数据库中...但是,一旦我将其关闭/最终确定,就需要保存状态。
以下是我尝试设置的方法:
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/