【问题标题】:Changing primary key id to String type in Grails在 Grails 中将主键 id 更改为字符串类型
【发布时间】:2012-02-09 23:55:21
【问题描述】:

我的 Grails 2.0 应用定义了一个用户域对象:

class User {

static mapping = {
    table "dt_user"
    columns {
      id column:'user_id', generator:'assigned', type:'string'
    }
}

当我尝试像这样在我的 BootStrap 文件中保存新用户时:

def user = new User(id: "smith").save(failOnError:true)

我收到以下错误:

| Error 2012-01-13 10:09:42,659 [main] ERROR property.BasicPropertyAccessor  - IllegalArgumentException in class: User, setter method of property: id
| Error 2012-01-13 10:09:42,660 [main] ERROR property.BasicPropertyAccessor  - expected type: java.lang.Long, actual value: java.lang.String

我也尝试将 User 类更改为:

class User {
    static mapping = {
        table "dt_user"
        columns {
            id column:'user_id', generator:'assigned', type:'string', name:'id'
        }
    }

    String id 
}

这使上述错误消失了。但是我发现这会导致自动生成 id,完全忽略了generator: 'assigned' 子句。

我在这里做错了什么?

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:

    看起来将它包装在 columns 块中是罪魁祸首。这可能在某些时候(在我之前)是必需的,但只要我使用过 Grails 并且显然现在已经损坏,它就是可选的。但是你可以直接声明列映射:

    class User {
    
       String id
    
       static mapping = {
          table "dt_user"
          id column: 'user_id', generator: 'assigned'
       }
    }
    

    只要该字段被声明为字符串并且它被配置为assigned,它就可以工作;不需要告诉 GORM 它是一个字符串,它可以识别出来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 2012-06-04
      • 2018-03-21
      • 1970-01-01
      • 2015-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多