我有一个包含许多成员变量的域类。让我们说它看起来像这样:
class Foo {
String BARID
int NUM1
}
当我尝试持久化对象时,Hibernate会抛出异常(“org.springframework.orm.hibernate3.HibernateSystemException:为类提供错误类型的id”)抱怨我的Id应该是Long类型而不是String ...但我不希望BARID实际上是表中的id,它只是因为无关的原因而被命名。我需要该变量在对象和数据库中都显示为BARID,以实现下游兼容性(其他程序要求将其称为BARID)。
很明显,冬眠正试图在引擎盖下看出来并找出哪些字段是ID。我怎么能告诉hibernate与它的想法相反,这不是一个id字段?
更新:我意识到变量大小写是非标准的,但我更愿意保持原样,除非这是因为它被打破了。 (为了记录,我尝试切换到全部小写“barid”,我得到完全相同的例外)。
解决方案:我使用了Jeff提出的明确定义映射块的解决方案:
static mapping = {
id generator: 'increment'
}
答案 0 :(得分:1)
听起来你仍然想要正常的id字段,所以如果你只是将它添加到域对象中它应该没问题我在Grails 2.3.1上进行了测试
class Foo {
Long id
String BARID
int NUM1
}
此外,如果您不想使用该方法,则始终可以使用映射块来配置ID。 Doc Here