Grails:TypemismatchException-提供了错误类型的ID-预期:java.lang.integer



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 Integernew Longnew Boolean等。使用文字,让Java Autobox为您提供值。如果您查看IntegerLong的来源,您会发现他们的valueOf方法(自动氧化时使用)保持较小值的256个缓存。这不会带来可观的节省,而是一个好主意,并且由于您与构造函数和valueOf相同,因此最好始终使用valueOf

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

所以您最好的选择是少工作:

UserSettings.get("12345")

最新更新