Grails 尝试获取时ID类型不匹配
今天早上早些时候刚刚测试了我的代码,发现了一些我似乎无法解决的问题 我的SKU类有一个自定义ID生成器(assinged),用于获取字符串:Grails 尝试获取时ID类型不匹配,grails,groovy,gorm,Grails,Groovy,Gorm,今天早上早些时候刚刚测试了我的代码,发现了一些我似乎无法解决的问题 我的SKU类有一个自定义ID生成器(assinged),用于获取字符串: static mapping = { id generator: 'assigned', name: 'sku' } 我创建了一个ID为:“1234445”的SKU对象(通常我的SKU ID是虚线字母和数字的混合体,但仅出于测试目的,我使用了一个数字作为字符串) 现在,每当我尝试执行SKU.get(“1234445”)时,都会出现以下错误: 提供
static mapping = {
id generator: 'assigned', name: 'sku'
}
我创建了一个ID为:“1234445”的SKU对象(通常我的SKU ID是虚线字母和数字的混合体,但仅出于测试目的,我使用了一个数字作为字符串)
现在,每当我尝试执行SKU.get(“1234445”)时,都会出现以下错误:
提供的id类型错误
应为:类java.lang.String,获得类java.lang.Long
显然,我提供了一个字符串,但在执行.get时,它会将其视为一个长字符串,从而导致错误
除了不使用看起来像SKU.id(在我的例子中是SKU.SKU)的数字的字符串外,还有什么其他解决方法吗
如果要使用
sku.get(“123445”)
如果需要专门使用sku
作为标识符,则使用
SKU.findBySku("123445")
使用您现在拥有的映射(如问题中所述)。很抱歉线程死灵术,但我最近遇到了。事实证明(感谢提供的解决方案),除了定义
字符串sku
之外,还可以通过定义字符串id
来解决此问题。以下内容有点难看,但很有效:
class Sku {
String id
String sku
static mapping = {
id name: 'sku', generator: 'assigned'
}
}
然后在斯波克测试中:
when:
(new Sku(sku: sku)).save()
then:
Sku.get(sku)
where:
sku << ['12345', 'f00-b4r']
当:
(新Sku(Sku:Sku)).save()
然后:
Sku.get(Sku)
哪里:
sku它不起作用,仍然是相同的错误,我认为当它进入.get时,它会在到达数据库之前很久转换回。您可能会遇到相同的问题,但请确保使用的是强类型变量。试试看,例如,String key='1234445';SKU.get(key)代码>另外,请记住“1234445”是一个字符串,而“1234445”是一个GString…最初在我的代码中是这样的(它是从我的视图传递到控制器的,即:String key=String.valueOf(1234445)),是的,当时我对错误感到困惑,我尝试了几种不同的方法来构造一个新字符串供我使用,他们都没有经历过,每次都是相同的错误。字符串是什么意思?将字符串
强制转换为字符串
?@dmahapatro-“1234445”在groovy中不是字符串,而是GString1234445'是一个字符串(注意单引号和双引号)谢谢,我现在读你的答案时有点似曾相识,感觉我以前在某个地方读过,但不知怎的,我没有意识到它遇到了错误。@16点当你面对这些拦截器时,只需使用grails控制台
,并尝试测试一下……:)
class Sku {
String id
String sku
static mapping = {
id name: 'sku', generator: 'assigned'
}
}
when:
(new Sku(sku: sku)).save()
then:
Sku.get(sku)
where:
sku << ['12345', 'f00-b4r']