i具有以下域模型类:
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"方法将我的整数变成一个漫长的过程中。更改Userettings域类中" PID"属性的类型可以长期修复事物,但是,由于我正在与旧数据库集成,因此我需要ID是一个不长的整数。
通常不要使用new Integer
,new Long
,new Boolean
等。使用文字,让Java Autobox为您提供值。如果您查看Integer
和Long
的来源,您会发现他们的valueOf
方法(自动氧化时使用)保持较小值的256个缓存。这不会带来可观的节省,而是一个好主意,并且由于您与构造函数和valueOf
相同,因此最好始终使用valueOf
。
此外,Gorm将将输入ID转换为域类的正确类型。这就是SomeDomainClass.get(params.id)
在控制器中工作的原因 - 即使所有参数都是字符串,Gorm也可以轻松地从字符串转换为数字类型。
所以您最好的选择是少工作:
UserSettings.get("12345")