在 Grails 中将主键 id 更改为字符串类型
Posted
技术标签:
【中文标题】在 Grails 中将主键 id 更改为字符串类型【英文标题】:Changing primary key id to String type in Grails 【发布时间】: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'
子句。
我在这里做错了什么?
【问题讨论】:
【参考方案1】:看起来将它包装在 columns
块中是罪魁祸首。这可能在某些时候(在我之前)是必需的,但只要我使用过 Grails 并且显然现在已经损坏,它就是可选的。但是你可以直接声明列映射:
class User
String id
static mapping =
table "dt_user"
id column: 'user_id', generator: 'assigned'
只要该字段被声明为字符串并且它被配置为assigned
,它就可以工作;不需要告诉 GORM 它是一个字符串,它可以识别出来。
【讨论】:
以上是关于在 Grails 中将主键 id 更改为字符串类型的主要内容,如果未能解决你的问题,请参考以下文章
在 Grails Spring Security 插件中将 AccessDecisionManager 更改为 UnanimousBased
ASP.NET Identity - 将用户 ID 主键默认类型从字符串更改为 int 以及使用自定义表名时出错