Подтвердить что ты не робот

Как установить значение по умолчанию в классе домена grails

Можно ли установить значение по умолчанию для свойства класса домена? У меня есть класс, называемый 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++
    }
}
4b9b3361

Ответ 1

Это будет возможно в 2.2, которое должно быть выпущено на этой неделе или в следующем. См. http://jira.grails.org/browse/GRAILS-5520 для соответствующего запроса функции. Синтаксис будет

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

Теперь вам нужно будет сделать то, что вы делаете, - установите значение как значение по умолчанию для поля. Вы можете вручную обновить схему базы данных или выполнить ее как часть переноса.

Ответ 2

Чтобы использовать предыдущий ответ, вы можете использовать атрибут defaultValue в Grails 2.2, но вам нужно быть осторожным, чтобы поместить двойные и одинарные кавычки по умолчанию для значений String и двойных кавычек вокруг целочисленных свойств, чтобы значения по умолчанию отображались правильно в DDL. Так, например, вам нужно использовать:

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

Если вы используете только одинарные кавычки, вы получите сообщение об ошибке "Column" CASH "not found" Кроме того, насколько я могу судить, значения по умолчанию не работают для свойств, которые перечислены.

Ответ 3

Если бы одна и та же проблема и использование статического сопоставления не работали для меня (с использованием 2.2.3); приведенная ниже ссылка предоставила мне функциональный ответ (установите значение по умолчанию в объявлениях объекта):

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

Для String инкапсулируйте кавычками; int/integer должно быть просто значением.

Надеюсь, это поможет!