Grails 尝试获取时ID类型不匹配

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”)时,都会出现以下错误: 提供

今天早上早些时候刚刚测试了我的代码,发现了一些我似乎无法解决的问题

我的SKU类有一个自定义ID生成器(assinged),用于获取字符串:

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']