2014-06-09 64 views
2

我遇到了一些我没想到的行为。我有一个对象具有status。这个对象有两个状态,正在进行并关闭。当对象正在进行时,我想要计算状态并且不保存在数据库中...但是,一旦我关闭它/完成它,状态需要被保存。Grails getter写入数据库?

以下是我试图设置的东西,顺便说一句:

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写入数据库,并且有办法绕过它。

回答

2

所有字段被保存到数据库中,除非你明确地定义,否则。您重写getter的事实并不会自动告诉Grails您不想将该属性持久保存到数据库中。为此,您必须将该属性定义为瞬态:

static transients = ['status']