4

分かりやすく聞いてみようかな…

私は grails から始めて、user というドメイン クラスを作成しました。私の知る限り、Hibernate はこのドメイン クラスをデータベースにマップするために使用されます。これは、hsqldb でうまく機能します。

テーブルが「user」と呼ばれているため(javaDBの予約語のようです)、javaDBに切り替えてエラーメッセージを取得しようとしました。

したがって、次のようなステートメント

create table user ...

エラーメッセージが表示されます。

create table "user" ...

動作しますが、Hibernate はテーブル名を引用符で囲んでいないようです。

テーブル名で動作させるために、引用符を使用するように Hibernate を構成するにはどうすればよいですか?

PS: はい、わかっています。ドメイン クラスを別のテーブル名にマップできます... :-)

4

2 に答える 2

1

テーブル名を二重引用符で囲みましたか:

class User {
  ..
  static mapping = {
      table '"user"'
  }
}

更新:joinTableこの結果の 1 つは、キーワードを使用して結合テーブルの名前もカスタマイズする必要があることです。これは理にかなっているように思えますが、規則は Grails の利点の 1 つであり、規則に依存しないことはその哲学に反することになります。個人的には、ここで予約語 (つまり、 not user) を使用することは避けたいと思います。

于 2010-04-16T08:17:05.907 に答える
0

とった。Pascal が既に述べたように、マッピング エントリが鍵です。ただし、二重引用符を使用する代わりに、バック ティックを使用すると成功します。

static mapping = {
  table "`user"
}

これは、SQL を生成するときにテーブル名を引用符で囲むように hibernate に指示します。対応するすべてのテーブルでも機能するようです...しかし、どういうわけか、それらのいくつかで「ユーザー」の最後の文字を削除します... :-(

したがって、ドメイン クラスを、問題を引き起こさないテーブル名に実際に再マッピングすることが最善の方法であるように思われます。

static mapping = {
  table "appuser"
}
于 2010-04-17T19:48:29.640 に答える