如何在 Grails 2.2 中设置域类值的默认值?
Posted
技术标签:
【中文标题】如何在 Grails 2.2 中设置域类值的默认值?【英文标题】:How to set default value for Domain Class Values in Grails 2.2? 【发布时间】:2013-05-06 12:54:05 【问题描述】:在我的 Grails 域类中,我想设置保留在数据库中的默认值。我使用mysql作为数据库。我试着这样做:
class A
long someValue = 1
long someOtherValue
boolean someBool = true
boolean someOtherBool
static mapping =
someOtherValue defaultValue: 1
someOtherBool defaultValue: true
但是没有任何效果。数据库中没有设置默认值。为了正确设置默认值,我必须进行哪些更改?
【问题讨论】:
【参考方案1】:如果您使用的是以上 Grails 2.2,那么您可以使用 defaultValue。看伯特的回答here 试试看,希望对你有帮助:
Class A
Long someValue
Long someOtherValue
Boolean someBool
Boolean someOtherBool
static mapping =
someOtherValue defaultValue: 1
someOtherBool defaultValue: true
...
【讨论】:
这是我写的问题。我使用 Grails 2.2.2 但它不工作。 这适用于 2.3.6 中的所有类型,但不适用于Boolean
。我试过defaultValue: 'true'
和defaultValue: true
。但表中填满了null
。我必须使用Boolean mycolumn = Boolean.TRUE
你的数据库是什么?
使用 grails 2.5 和 mysql 5.6,似乎不可能为布尔值或布尔值设置数据库级别的 defaultValue。 true, 'true', "true", 1, '1', "1", Boolean.TRUE - 这些都不适用于静态映射部分。【参考方案2】:
我发现要让 defaultValue 与 String 属性一起使用,我需要在单引号周围加上双引号,而要让 defaultValue 为数字属性工作,我需要在数字周围加上双引号,否则默认值不会出现在DDL。所以,例如:
static mapping =
myStringProperty defaultValue: "'Cash'"
myIntProperty defaultValue: "0"
此外,据我所知,默认值不适用于枚举属性。
【讨论】:
遗憾的是,这不适用于布尔值(它是长度为 1 的 BIT 字段)。【参考方案3】:class A
long someValue
long someOtherValue
boolean someBool = Boolean.TRUE
boolean someOtherBool = Boolean.TRUE
static mapping =
someValue defaultValue: '1'
someOtherValue defaultValue: '1'
这将工作,在 2.2.3 中测试。
【讨论】:
我还必须在 2.3.6 中设置这样的布尔列,在映射中为布尔列设置 defaultValue 不起作用。 以上在 grails 2.5 和 mysql 中对布尔值不起作用,始终不提供默认值。 在 Grails 3.3defaultValue: false
或 defaultValue:"'false'"
或 defaultValue: 'false'
中的 MySQL 中也不起作用以上是关于如何在 Grails 2.2 中设置域类值的默认值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用用户定义的函数为 grails 中的域类变量设置默认值
无法在 Phonegap iOS 的 document.cookie 中设置域?