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++
}
}
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.
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.
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!