多数のメンバー変数を持つドメイン クラスがあります。次のように見えるとしましょう。
class Foo {
String BARID
int NUM1
}
オブジェクトを永続化しようとすると、Hibernate が例外をスローし ("org.springframework.orm.hibernate3.HibernateSystemException: クラスに間違ったタイプの ID が提供されました")、ID は String ではなく Long 型である必要があると不平を言います...しかし、BARID を実際にテーブル内の id にしたくありません。無関係な理由から、単にそのように名前が付けられています。ダウンストリームの互換性のために、オブジェクトとデータベースの両方でその変数を BARID として表示する必要があります (他のプログラムでは BARID と呼ぶ必要があります)。
明らかに、Hibernate は内部で凝っていて、どのフィールドが ID であるかを把握しようとしています。Hibernate の考えに反して、これは id フィールドではないことをどのように伝えることができますか?
更新: 変数の大文字と小文字が非標準であることは認識していますが、これが壊れている理由でない限り、そのままにしておくことをお勧めします。(記録のために、すべて小文字の「barid」に切り替えてみましたが、まったく同じ例外が発生しました)。
解決策: マッピング ブロックを明示的に定義する Jeff の提案した解決策を使用しました。
static mapping = {
id generator: 'increment'
}