1

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

我的 SKU 类有一个自定义 ID 生成器(分配)来获取字符串:

static mapping = {
    id generator: 'assigned', name: 'sku'
}

我创建了一个 ID 为“ 1234445 ”的 SKU 对象(通常我的 SKU id 是短划线字母和数字的混合,但出于测试目的,我使用数字作为字符串)

现在,每当我尝试执行 SKU.get(" 1234445 ") 时,都会收到以下错误:

提供了错误类型的 id

预期:类 java.lang.String,得到类 java.lang.Long

显然,我提供了一个字符串,当执行 .get 时,它以某种方式将其视为 Long,从而导致错误。

除了不使用看起来像 SKU.id 数字的字符串(在我的情况下为 Sku.sku)之外,关于如何解决此问题的任何想法?

4

3 回答 3

2

如果要使用,请使用String id代替String skuSKU.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")

使用您现在拥有的映射(如问题中所述)。

于 2013-09-28T18:09:40.627 回答
0
SKU.get("1234445" as String)

应该管用

于 2013-09-28T17:20:06.413 回答
0

很抱歉线程死灵,但我最近遇到了同样的问题。事实证明(感谢@Peter的解决方案),您可以通过定义String id 除了. 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']
于 2017-12-07T14:30:42.530 回答