[英]How do I change the name of a Grails domain class id field?
我有一个名为FundType
的Grails 2.2.3域类,我试图映射到遗留数据库表。 它有两个字段: code
和description
。 我想在我使用域类的时候将id
称为code
,最好是在任何生成的脚手架上。 但是每次我在id
上使用name键时我都会遇到这个异常:
| Error 2013-07-24 09:38:44,855 [localhost-startStop-1] ERROR context.GrailsContextLoader - Error initializing the application: Error evaluating ORM mappings block for domain [com.company.scholallow.FundType]: null
Message: Error evaluating ORM mappings block for domain [com.company.scholallow.FundType]: null
这是我的域类包含的内容:
class FundType {
String id
String description
static mapping = {
id column: 'fund_code', generator: 'assigned', name: 'code'
description column: 'fund_desc'
}
}
每当我使用FundType实例时,我都想调用像fundTypeInstance.code
和NOT fundTypeInstance.id
这样的代码。 这将使我对用户更友好,因为我正在处理一些叫做代码的东西,而不是id。
所以我想知道我想做的事情是什么? 我的域类中导致此ORM映射错误的错误是什么?
编辑:
好的,所以我将我的域类更改为以下内容,并且我找到了ID null null错误的FundType。
class FundType {
String code
String description
static mapping = {
id generator: 'assigned', name: 'code'
code column: 'fund_code'
description column: 'fund_desc'
}
}
我添加了一些sql日志来查看Hibernate正在做什么,这就是输出: select * from ( select this_.FUND_CODE as RTVFTYP1_1_0_, this_.FUND_DESC as RTVFTYP2_1_0_ from RTVFTYP this_ ) where rownum <= ?
在域类中使用String code
而不是String id
。
您有fund_code
GORM提及我要使用映射到表列fund_code
的属性code
,其值被指定为id
(主键)。 在这种情况下,您只需要在域类中定义属性code
而不是id
。
(我正在回答有助于我将来使用的其他程序员的修复)
@dmahapatro是对的,我需要添加String code
。
它看起来像命名id不同的东西只是不能很好地与Grails动态脚手架。 我做了一些测试,我仍然可以使用FundType.get(code)
,它将返回对象就像我传入一个id一样。 我也可以做FundType.findByCode(code)
。
看起来我必须更改scaffolded控制器以期望String id而不是默认的Long id。 我还必须更改scaffolded list视图以将fundTypeInstance.code
而不是fundTypeInstance.id
发送到show controller,但我怀疑添加一个只返回this.code的getId()将解决这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.