我遇到了某些我没有想到的行为。我有一个具有status
的对象。该对象有两个状态,进行中和关闭。当对象正在进行时,我希望计算状态而不将其保存在数据库中……但是,一旦我将其关闭/完成,则需要保存状态。
以下是我尝试设置的方式:
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
}
}
如您所见,我期待检查的代码可以看到我期待检查状态是否为null。如果status不为null,则将其返回。如果为null,则进行其他计算。但是...由于某种原因,计算出的状态将持久化到数据库中。现在我知道我可以随时加入:
if(finalized){
return status
}
VS
if(status)
,我会得到正确的返回。但是...我不要数据库中的垃圾数据。另一种方法是不覆盖 setter/getter 。我的问题基本上可以归结为。为什么要覆盖将 setter/getter 写入数据库,并且有解决方法?
最佳答案
除非您另外明确定义,否则所有字段都将持久保存到数据库中。您正在重写 setter/getter 这一事实并不会自动告诉Grails您不想将该属性持久化到数据库中。为此,必须将属性定义为 transient :
static transients = ['status']
关于grails - Grails setter/getter 写入数据库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24121294/