尝试获取时ID类型不匹配

时间:2013-09-28 16:54:50

标签: grails groovy gorm

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

我的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)之外,有关如何解决这个问题的任何想法吗?

3 个答案:

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