1

我有一个具有许多成员变量的域类。假设它看起来像这样:

class Foo {
    String BARID
    int NUM1
}

当我尝试持久化对象时,Hibernate 抛出异常(“org.springframework.orm.hibernate3.HibernateSystemException:为类提供错误类型的 id”)抱怨我的 Id 应该是 Long 类型而不是 String ...但我不希望 BARID 实际上是表中的一个 id,它只是出于不相关的原因以这种方式命名。为了下游兼容性(其他程序要求将其称为 BARID),我需要该变量在对象和数据库中都显示为 BARID。

显然,hibernate 试图在幕后花哨并找出哪些字段是 id。我如何告诉 hibernate 与它的想法相反,这不是一个 id 字段?

更新:我意识到变量大小写是非标准的,但我更愿意保持原样,除非这就是它被破坏的原因。(为了记录,我尝试切换到所有小写的“barid”,我得到了完全相同的例外)。

解决方案:我使用了 Jeff 建议的明确定义映射块的解决方案:

static mapping = {
    id generator: 'increment'
}
4

1 回答 1

1

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

class Foo {
    Long id
    String BARID
    int NUM1
}

此外,如果您不想使用该方法,您可以随时使用映射块来配置 id。文档在这里

于 2013-11-07T19:21:38.723 回答