2012-11-27 31 views
36

有什麼辦法可以設置一個默認值域類屬性? 我有一個名爲PayMethod的類,我希望「名稱」屬性默認爲「現金」。當我創建這個表時,我想要這個默認值,這可能使用約束?我如何設置默認值grails域類

package abc 

import util.UserUtil 
import embed.AuditUser 

class PayMethod { 

    String name = "Cash" 

    AuditUser audit = new AuditUser() 
    static embedded = ['audit']  

    static constraints = { 
     name blank: false, size: 5..30, unique: true 
    } 

    static mapping = { 
     table 't01i0010' 
     id column: 'F_ID', precision: 4, scale: 0 
     name column: 'F_NAME', length: 30, defaultValue: 'Cash' 
     version column: 'F_REVISION' 
    } 

    def authUserService 
    int insertIndex = 0 
    int updateIndex = 0 
    static transients = ['authUserService', 'insertIndex', 'updateIndex']  

    def beforeInsert = { 
     audit.entryUser = UserUtil.user() 
     audit.entryDate = new Date(); 
    } 

    def beforeUpdate = { 
     audit.reviseUser = UserUtil.user() 
     audit.reviseDate = new Date(); 
    } 

    def afterInsert = { 
     if(insertIndex == 0){ 
      def user = audit.entryUser 
      def date = audit.entryDate 
      log.info "POST INSERT => ENTERER: ${user} ENTERED: ${date}" 
     } 
     insertIndex++ 
    } 

    def afterUpdate = { 
     if(updateIndex == 0){ 
      def user = audit.reviseUser 
      def date = audit.reviseDate 
      log.info "POST UPDATE => REVISE: ${user} REVISED: ${date}" 
     } 
     updateIndex++ 
    } 
} 

回答

48

這將是可能的2.2應該在本週或下一個發佈。有關功能請求,請參閱http://jira.grails.org/browse/GRAILS-5520。語法將

static mapping = { 
    name defaultValue: "'Cash'" 
} 

現在你需要做的,你在做什麼 - 設置的值作爲字段的默認值。您可以手動更新數據庫模式,或將其作爲遷移的一部分來完成。

+0

它不工作,我想在數據庫中設置defaultvalue name ='cash'當我創建此表 –

+0

使用'defaultValue'不工作?正如我所說,這隻會在2.2還沒有發佈。在此之前,您可以手動更新數據庫。 –

+0

爲什麼我們必須把嵌套的單引號放在那裏? – Philippe

18

要構建上一個答案,您可以在Grails 2.2中使用defaultValue屬性,但需要注意圍繞整型屬性的字符串屬性和雙引號的默認值放置雙引號和單引號,以便顯示默認值正確地在DDL中。所以,舉例來說,你需要使用:

static mapping = { 
    myStringProperty defaultValue: "'Cash'" 
    myIntProperty defaultValue: "0" 
} 

如果你只使用單引號,你最終將包含「專欄‘現金’未找到」的錯誤 此外,據我所知,默認值不適用於枚舉屬性。