有没有办法为域类属性设置默认值? 我有一个名为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++
}
}
答案 0 :(得分:53)
这将在本周或下周发布的2.2中实现。有关相关功能请求,请参阅http://jira.grails.org/browse/GRAILS-5520。语法将是
static mapping = {
name defaultValue: "'Cash'"
}
现在你需要做你正在做的事情 - 将值设置为字段的默认值。您可以手动更新数据库架构,也可以在迁移过程中完成工作。
答案 1 :(得分:20)
要构建上一个答案,您可以使用Grails 2.2中的defaultValue属性,但是您需要小心地将双引号和单引号放在String属性的默认值周围,并在整数属性周围使用双引号,以便正确显示默认值在DDL中。因此,例如,您需要使用:
static mapping = {
myStringProperty defaultValue: "'Cash'"
myIntProperty defaultValue: "0"
}
如果您只使用单引号,最终会出现类似“列”CASH“未找到”的错误 另外,据我所知,默认值不适用于枚举属性。
答案 2 :(得分:3)
同样的问题和使用静态映射对我来说也不起作用(使用2.2.3);下面的链接为我提供了一个功能性答案(在对象声明中设置默认值):
http://grails.1312388.n4.nabble.com/How-to-set-a-default-value-for-column-td1383753.html
对于String,用引号封装; int / integer应该只是值。
希望这有帮助!