我如何设置grails域类的默认值

有没有办法将默认值设置为域类属性? 我有一个名为PayMethod的类,我希望“名称”属性默认为“现金”。 我想这个默认值,当我创build这个表,这是可能的使用约束?

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

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

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

现在你需要做你正在做的事情 – 将该值设置为字段的默认值。 您可以手动更新数据库模式,也可以将其作为迁移的一部分来完成。

要构build上一个答案,可以使用Grails 2.2中的defaultValue属性,但是需要小心地将双引号和单引号放在string属性的默认值和整数属性的双引号周围,以便默认值在DDL中正确显示。 所以,例如,你需要使用:

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

如果你只使用单引号,最终会出现像“Column”CASH“找不到”的错误。另外,就我所知,默认值对于枚举属性不起作用。

有同样的问题,使用静态映射也不适用于我(使用2.2.3); 下面的链接为我提供了一个function性的答案(在对象声明中设置默认值):

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

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

希望这可以帮助!