Grails:TypeMismatchException - 提供错误类型的id - 预期:类java.lang.Integer,得到类java.lang.Long

时间:2014-02-04 19:53:30

标签: grails mapping gorm

我有以下域模型类:

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。

1 个答案:

答案 0 :(得分:2)

一般情况下,请勿使用new Integernew Longnew Boolean等。使用文字并让Java为您自动提供值。如果您查看IntegerLong的来源,您会看到他们的valueOf方法(在自动装箱时使用)会保留256个较小值的缓存。这不会带来显着的节省,但是这是一个好主意,并且由于您使用构造函数和valueOf获得相同的内容,因此最好始终使用valueOf

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

所以你最好的选择是减少工作量:

UserSettings.get("12345")
相关问题