我有以下域模型类:
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。
答案 0 :(得分:2)
一般情况下,请勿使用new Integer
,new Long
,new Boolean
等。使用文字并让Java为您自动提供值。如果您查看Integer
和Long
的来源,您会看到他们的valueOf
方法(在自动装箱时使用)会保留256个较小值的缓存。这不会带来显着的节省,但是这是一个好主意,并且由于您使用构造函数和valueOf
获得相同的内容,因此最好始终使用valueOf
。
此外,GORM会将输入ID转换为域类的正确类型。这就是SomeDomainClass.get(params.id)
在控制器中工作的原因 - 即使所有参数都是字符串,GORM也可以轻松地从字符串转换为数字类型。
所以你最好的选择是减少工作量:
UserSettings.get("12345")