2014-06-09 107 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']