web-dev-qa-db-fra.com

Comment puis-je définir la valeur par défaut dans la classe de domaine Grails

Existe-t-il un moyen de définir une valeur par défaut pour la propriété de classe de domaine? J'ai une classe appelée PayMethod, où je veux que la propriété "name" par défaut soit "cash". et je veux cette valeur par défaut lorsque je crée cette table, est-ce possible en utilisant des contraintes?

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++
    }
}
42
Omar Faruq

Cela sera possible dans la version 2.2 qui devrait sortir cette semaine ou la prochaine. Voir http://jira.grails.org/browse/GRAILS-552 pour la demande de fonctionnalité appropriée. La syntaxe sera

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

Pour l'instant, vous devez faire ce que vous faites - définir la valeur comme valeur par défaut du champ. Vous pouvez mettre à jour manuellement le schéma de base de données ou effectuer le travail dans le cadre d'une migration.

54
Burt Beckwith

Pour s'appuyer sur la réponse précédente, vous pouvez utiliser l'attribut defaultValue dans Grails 2.2, mais vous devez faire attention à mettre des guillemets doubles et simples autour des valeurs par défaut pour les propriétés String et des guillemets doubles autour des propriétés entières afin que les valeurs par défaut apparaissent correctement dans la DDL . Ainsi, par exemple, vous devez utiliser:

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

Si vous n'utilisez que des guillemets simples, vous vous retrouverez avec une erreur comme "Colonne" CASH "introuvable" De plus, pour autant que je sache, les valeurs par défaut ne fonctionnent pas pour les propriétés qui sont des énumérations.

20
Ed OConnor-Giles

J'ai eu le même problème et l'utilisation du mappage statique n'a pas fonctionné pour moi non plus (en utilisant 2.2.3); le lien ci-dessous m'a fourni une réponse fonctionnelle (définissez la valeur par défaut dans vos déclarations d'objet):

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

Pour String, encapsulez avec des guillemets; int/integer devrait juste être la valeur.

J'espère que cela t'aides!

3
fells77