Grails 列默认值不默认
Grails column default value not defaulting
我正在使用 Grails 2.4.3 并拥有此域 class:
class StockItem extends DisplayableDomain {
String name
Integer quantityOnHand
BigDecimal wholesalePrice
BigDecimal retailPrice
BigDecimal profit
static constraints = {
name minSize: 3, maxSize: 80
wholesalePrice min: 0.0, scale: 2
retailPrice min: 0.0, scale: 2, validator: { retailPrice, StockItem obj ->
if (retailPrice < obj.wholesalePrice) {
['retailLessThanWholesale']
}
}
quantityOnHand min: 0
profit nullable: true
}
@Override
String getDisplayString() {
name
}
static mapping = {
profit formula: "RETAIL_PRICE - WHOLESALE_PRICE"
quantityOnHand column: 'quantityOnHand', defaultValue: "0"
}
}
当我尝试添加 StockItem
时,出现此错误:
Message: Validation Error(s) occurred during save():
- Field error in object 'com.waldoware.invoicer.StockItem' on field 'quantityOnHand': rejected value [null]; codes [com.waldoware.invoicer.StockItem.quantityOnHand.nullable.error.com.waldoware.invoicer.StockItem.quantityOnHand,com.waldoware.invoicer.StockItem.quantityOnHand.nullable.error.quantityOnHand,com.waldoware.invoicer.StockItem.quantityOnHand.nullable.error.java.lang.Integer,com.waldoware.invoicer.StockItem.quantityOnHand.nullable.error,stockItem.quantityOnHand.nullable.error.com.waldoware.invoicer.StockItem.quantityOnHand,stockItem.quantityOnHand.nullable.error.quantityOnHand,stockItem.quantityOnHand.nullable.error.java.lang.Integer,stockItem.quantityOnHand.nullable.error,com.waldoware.invoicer.StockItem.quantityOnHand.nullable.com.waldoware.invoicer.StockItem.quantityOnHand,com.waldoware.invoicer.StockItem.quantityOnHand.nullable.quantityOnHand,com.waldoware.invoicer.StockItem.quantityOnHand.nullable.java.lang.Integer,com.waldoware.invoicer.StockItem.quantityOnHand.nullable,stockItem.quantityOnHand.nullable.com.waldoware.invoicer.StockItem.quantityOnHand,stockItem.quantityOnHand.nullable.quantityOnHand,stockItem.quantityOnHand.nullable.java.lang.Integer,stockItem.quantityOnHand.nullable,nullable.com.waldoware.invoicer.StockItem.quantityOnHand,nullable.quantityOnHand,nullable.java.lang.Integer,nullable]; arguments [quantityOnHand,class com.waldoware.invoicer.StockItem]; default message [Property [{0}] of class [{1}] cannot be null]
显然 quantityOnHand
的默认值没有设置。我试过将默认值和一个独立的整数值放在引号中。我也试过将 quantityOnHand
设置为 nullable
。这可以防止错误,但该列为空。
正如@Biswas 评论的那样,在属性定义处进行简单赋值即可解决默认值问题。
class StockItem extends DisplayableDomain {
Integer quantityOnHand = 0
}
此外,在 OP 的情况下,使用 int
可以解决问题。像 Integer
、Double
和 Boolean
这样的包装器 类 默认情况下将它们的值设置为 null
,尽管这两种类型都是 Groovy 中的对象。
class IntTest {
Integer intWrapper
int intPrimitive
}
def test = new IntTest()
println "Integer: ${test.intWrapper}"
println "int: ${test.intPrimitive}"
输出:
Integer: null
int: 0
所以这也行得通:
class StockItem extends DisplayableDomain {
int quantityOnHand
}
当我不希望属性可以为空时,我使用原始标识符(也是 Groovy 中的对象)来避免此类错误。
我正在使用 Grails 2.4.3 并拥有此域 class:
class StockItem extends DisplayableDomain {
String name
Integer quantityOnHand
BigDecimal wholesalePrice
BigDecimal retailPrice
BigDecimal profit
static constraints = {
name minSize: 3, maxSize: 80
wholesalePrice min: 0.0, scale: 2
retailPrice min: 0.0, scale: 2, validator: { retailPrice, StockItem obj ->
if (retailPrice < obj.wholesalePrice) {
['retailLessThanWholesale']
}
}
quantityOnHand min: 0
profit nullable: true
}
@Override
String getDisplayString() {
name
}
static mapping = {
profit formula: "RETAIL_PRICE - WHOLESALE_PRICE"
quantityOnHand column: 'quantityOnHand', defaultValue: "0"
}
}
当我尝试添加 StockItem
时,出现此错误:
Message: Validation Error(s) occurred during save():
- Field error in object 'com.waldoware.invoicer.StockItem' on field 'quantityOnHand': rejected value [null]; codes [com.waldoware.invoicer.StockItem.quantityOnHand.nullable.error.com.waldoware.invoicer.StockItem.quantityOnHand,com.waldoware.invoicer.StockItem.quantityOnHand.nullable.error.quantityOnHand,com.waldoware.invoicer.StockItem.quantityOnHand.nullable.error.java.lang.Integer,com.waldoware.invoicer.StockItem.quantityOnHand.nullable.error,stockItem.quantityOnHand.nullable.error.com.waldoware.invoicer.StockItem.quantityOnHand,stockItem.quantityOnHand.nullable.error.quantityOnHand,stockItem.quantityOnHand.nullable.error.java.lang.Integer,stockItem.quantityOnHand.nullable.error,com.waldoware.invoicer.StockItem.quantityOnHand.nullable.com.waldoware.invoicer.StockItem.quantityOnHand,com.waldoware.invoicer.StockItem.quantityOnHand.nullable.quantityOnHand,com.waldoware.invoicer.StockItem.quantityOnHand.nullable.java.lang.Integer,com.waldoware.invoicer.StockItem.quantityOnHand.nullable,stockItem.quantityOnHand.nullable.com.waldoware.invoicer.StockItem.quantityOnHand,stockItem.quantityOnHand.nullable.quantityOnHand,stockItem.quantityOnHand.nullable.java.lang.Integer,stockItem.quantityOnHand.nullable,nullable.com.waldoware.invoicer.StockItem.quantityOnHand,nullable.quantityOnHand,nullable.java.lang.Integer,nullable]; arguments [quantityOnHand,class com.waldoware.invoicer.StockItem]; default message [Property [{0}] of class [{1}] cannot be null]
显然 quantityOnHand
的默认值没有设置。我试过将默认值和一个独立的整数值放在引号中。我也试过将 quantityOnHand
设置为 nullable
。这可以防止错误,但该列为空。
正如@Biswas 评论的那样,在属性定义处进行简单赋值即可解决默认值问题。
class StockItem extends DisplayableDomain {
Integer quantityOnHand = 0
}
此外,在 OP 的情况下,使用 int
可以解决问题。像 Integer
、Double
和 Boolean
这样的包装器 类 默认情况下将它们的值设置为 null
,尽管这两种类型都是 Groovy 中的对象。
class IntTest {
Integer intWrapper
int intPrimitive
}
def test = new IntTest()
println "Integer: ${test.intWrapper}"
println "int: ${test.intPrimitive}"
输出:
Integer: null
int: 0
所以这也行得通:
class StockItem extends DisplayableDomain {
int quantityOnHand
}
当我不希望属性可以为空时,我使用原始标识符(也是 Groovy 中的对象)来避免此类错误。