【问题标题】:How can i set default value in grails domain class如何在 grails 域类中设置默认值
【发布时间】:2012-11-14 16:10:49
【问题描述】:

有没有办法为域类属性设置默认值? 我有一个名为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


    【解决方案1】:

    这将在本周或下周发布的 2.2 中实现。有关相关功能请求,请参阅 http://jira.grails.org/browse/GRAILS-5520。语法将是

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

    现在您需要做您正在做的事情 - 将值设置为该字段的默认值。您可以手动更新数据库架构,或将工作作为迁移的一部分。

    【讨论】:

    • 它不起作用,我想在创建此表时在数据库中设置 defaultvalue name='cash'
    • 使用defaultValue 不起作用?正如我所说,这只适用于尚未发布的 2.2。在此之前,您可以手动更新数据库。
    【解决方案2】:

    要在上一个答案的基础上进行构建,您可以使用 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

      对于String,用引号封装; int/integer 应该只是值。

      希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 2013-05-06
        • 2013-12-10
        • 2014-04-16
        • 2012-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-31
        相关资源
        最近更新 更多