2012-11-27 12 views
36

ドメインクラスプロパティにデフォルト値を設定する方法はありますか? 私はPayMethodと呼ばれるクラスを持っています。ここでは、 'name'プロパティをデフォルトで 'cash'にします。私はこのテーブルを作成するときにこのデフォルト値が必要ですが、これは制約を使用して可能ですか?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

私はこのテーブルを作成すると、デフォルト値の名前= '現金'をデータベースに設定します。 –

+0

'defaultValue'を使用しても機能しませんか?私が言ったように、それはまだリリースされていない2.2でしか動作しません。これまではデータベースを手動で更新することができます。 –

+0

なぜそこにネストされた一重引用符を入れなければならないのですか? – Philippe

18

上記の答えをもとに構築するには、Grails 2.2のdefaultValue属性を使用することができますが、文字列プロパティのデフォルト値と整数プロパティを二重引用符で囲むように注意する必要があります。 DDLで正しくだから、例えば、あなたが使用する必要があります。

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

をあなただけの単一引用符を使用する場合は、私の知る限り、また、「列 『CASH』が見つかりません」 のようなエラーになってしまいます列挙型のプロパティではデフォルト値が機能しません。

3

同じ問題があり、静的マッピングを使用しても私には(2.2.3を使用して)動作しませんでした。下記のリンクは私に機能的な答え(あなたのオブジェクトの宣言にデフォルト値を設定)提供:文字列の

http://grails.1312388.n4.nabble.com/How-to-set-a-default-value-for-column-td1383753.html

、引用符でカプセル化します。 int/integerはちょうど値でなければなりません。

希望すると便利です。

関連する問題