2012-02-27 9 views
4

テーブル名を引用符で囲まずにHibernateがエラーをスローするPostgresに 'user'というテーブルを作成しようとしている状況があります。テーブル名を引用符で囲むようにHibernateを構成する方法

| Error 2012-02-27 23:06:58,782 [Thread-10] ERROR hbm2ddl.SchemaExport - Unsuccessful: create table user (id int8 not null, version int8 not null, account_expired bool not null, account_locked bool not null, email_address varchar(255) not null, enabled bool not null, first_name varchar(255) not null, last_name varchar(255) not null, mobile_number varchar(255) not null, "password" varchar(255) not null, password_expired bool not null, username varchar(255) not null unique, primary key (id)) 

これは、DataSource.groovyでPostgreSQLDialect使用する必要があることを指定するにもかかわらず、である:私はPostgresのを扱うときに、テーブル名の前後に引用符を置くために休止状態に設定するにはどうすればよい

dialect = org.hibernate.dialect.PostgreSQLDialect 

を?

+2

私は強く異なるテーブル名を使用することをお勧めします。予約語を使用すると、Hibernateだけでなく、すべての問題を解決できます。 –

答えて

7

mappingブロックのテーブル名をバッククォートで引用できます。 Hibernateは引用アプローチが方言に基づいて、データベースのためにあるものは何でもそれらを変換します:

static mapping = { 
    table "`user`" 
} 

あなたはまた、単に、例えば、エスケープ/引用を必要としない他の何かにテーブルの名前を変更することができます

static mapping = { 
    table "users" 
} 
1

私は(InfoQではによる「Grailsの入門」)そうであるように、あなたはすでにそれは、PostgreSQLに任意のカバレッジを提供していない理解したのと同じチュートリアルをfollwingしていると仮定。 this postに基づいて:

  1. "ユーザー"はPostgresの予約語です。
  2. マッピングは、(それが絶対的に明らかではありません)クラス自体に追加する必要があります。
class User { 
    String username 
    String password 
    ... 
    static mapping = { 
     table 'users' 
     password column: '`password`' 
    } 
} 

または

class User { 
    String username 
    String password 
    ... 
    static mapping = { 
     table '`user`' 
     password column: '`password`' 
    } 
} 
関連する問題