名称以“ID”结尾的成员变量被强制为grails(hibernate)的id

时间:2013-11-07 17:06:55

标签: hibernate grails gorm

我有一个包含许多成员变量的域类。让我们说它看起来像这样:

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'
}

1 个答案:

答案 0 :(得分:1)

听起来你仍然想要正常的id字段,所以如果你只是将它添加到域对象中它应该没问题我在Grails 2.3.1上进行了测试

class Foo {
    Long id
    String BARID
    int NUM1
}

此外,如果您不想使用该方法,则始终可以使用映射块来配置ID。 Doc Here