今天早上刚刚测试我的代码,发现了一些我似乎无法解决的问题。
我的SKU类有一个自定义ID生成器(assinged)来获取字符串:
static mapping = {
id generator: 'assigned', name: 'sku'
}
我创建了一个带有ID的SKU对象:“ 1234445 ”(通常我的SKU id是破折号字母和数字的混合,但仅出于测试目的,我使用数字作为字符串)
现在每当我尝试做SKU.get(“ 1234445 ”)时,我都会收到以下错误:
提供错误类型的ID
预期:类java.lang.String,得到类java.lang.Long
显然我提供了一个字符串,不管怎么说,当执行.get时它会将它视为Long,从而导致错误。
除了不使用看起来像SKU.id的数字的字符串(在我的情况下是Sku.sku)之外,有关如何解决这个问题的任何想法吗?
答案 0 :(得分:2)
如果要使用String id
String sku
代替SKU.get("123445")
class SKU {
String id
static mapping = {
id generator: 'assigned'
}
}
def newSku = new SKU()
newSku.id = '123445'
newSku.save(flush: true)
println SKU.get("123445")
如果您需要专门使用sku
作为标识符,请使用
SKU.findBySku("123445")
使用您现在拥有的映射(如问题中所述)。
答案 1 :(得分:0)
SKU.get("1234445" as String)
应该有效
答案 2 :(得分:0)
很抱歉线程死灵,但我最近遇到了the same problem。事实证明(感谢@Peter解决方案),您可以通过定义String id
以及<{em> String sku
来解决此问题。以下是有点难看,但有效:
class Sku {
String id
String sku
static mapping = {
id name: 'sku', generator: 'assigned'
}
}
然后在Spock测试中:
when:
(new Sku(sku: sku)).save()
then:
Sku.get(sku)
where:
sku << ['12345', 'f00-b4r']