gpt4 book ai didi

grails - Grails setter/getter 写入数据库?

转载 作者:行者123 更新时间:2023-12-02 13:51:40 25 4
gpt4 key购买 nike

我遇到了某些我没有想到的行为。我有一个具有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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com