我如何在grails域类中设置默认值

问题描述 投票:44回答:3

有没有办法为域类属性设置默认值?我有一个名为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++
    }
}
grails
3个回答
57
投票

这将在2.2版中发布,该版本应在本周或下周发布。有关功能请求,请参见http://jira.grails.org/browse/GRAILS-5520。语法将是

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

目前,您需要做的是-将值设置为该字段的默认值。您可以手动更新数据库架构,或在迁移过程中进行工作。


21
投票

要基于先前的答案,您可以在Grails 2.2中使用defaultValue属性,但需要注意在String属性的默认值前后加上双引号和单引号,而在整数属性周围加上双引号,以使默认值正确显示在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应该只是值。

希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.