46

ドメインクラスのプロパティにデフォルト値を設定する方法はありますか? という名前のクラスがPayMethodあり、nameプロパティをデフォルトに設定したいの"Cash"ですが、このテーブルを作成するときにこのデフォルト値が必要です。これは制約を使用して可能ですか?

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++
    }
}
4

3 に答える 3

60

これは、今週または来週リリースされる 2.2 で可能になります。関連する機能リクエストについては、http://jira.grails.org/browse/GRAILS-5520を参照してください。構文は次のようになります

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

今のところ、あなたがしていることをする必要があります - フィールドのデフォルト値として値を設定してください。データベース スキーマを手動で更新するか、移行の一部として作業を行うことができます。

于 2012-11-27T05:28:47.270 に答える
21

前の回答に基づいて、Grails 2.2 で defaultValue 属性を使用できますが、デフォルト値が DDL に正しく表示されるように、文字列プロパティのデフォルト値を二重引用符と単一引用符で囲み、整数プロパティを二重引用符で囲むように注意する必要があります。 . したがって、たとえば、次を使用する必要があります。

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

一重引用符のみを使用すると、「Column "CASH" not found」のようなエラーが発生します。また、私が知る限り、既定値は列挙型のプロパティには機能しません。

于 2013-07-12T18:00:04.483 に答える