gpt4 book ai didi

grails - Grails:TypeMismatchException-提供的类型错误的ID-预期:类java.lang.Integer,获得了类java.lang.Long

转载 作者:行者123 更新时间:2023-12-02 14:02:12 25 4
gpt4 key购买 nike

我有以下域模型类:

class UserSettings
{
static mapping = {
id name: 'pid', generator: 'assigned'
}

Integer pid
}

我正在尝试获得这样的用户设置实例:
UserSettings.get(new Integer("12345"))

但是,出现以下错误
Provided id of the wrong type for class UserSettings. Expected: class java.lang.Integer, got class java.lang.Long

我也尝试过将其传递为基本的int类型,并且遇到相同的错误。就像“get”方法将我的Integer转换为Long的过程中一样。将UserSettings域类中“pid”属性的类型更改为Long可以解决问题,但是,由于我要与旧数据库集成,因此我需要将ID设置为Integer而不是Long。

最佳答案

通常,不要使用new Integernew Longnew Boolean等。请使用文字并让Java为您自动装箱值。如果查看IntegerLong的来源,您会发现它们的valueOf方法(自动装箱时使用)保留了256个较小值的缓存。这不会带来可观的节省,但这是一个好主意,并且由于构造函数和valueOf具有相同的含义,因此最好始终使用valueOf

此外,GORM会将输入ID转换为域类的正确类型。这就是SomeDomainClass.get(params.id)在 Controller 中起作用的原因-即使所有参数都是字符串,GORM仍可以轻松地从字符串转换为数字类型。

因此,您最好的选择是减少工作量:

UserSettings.get("12345")

关于grails - Grails:TypeMismatchException-提供的类型错误的ID-预期:类java.lang.Integer,获得了类java.lang.Long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21562057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com