2012-02-27 73 views
4

我有一種情況,我試圖在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)) 

儘管這是指定它應該使用PostgreSQLDialect在DataSource.groovy中:在Postgres打交道時

dialect = org.hibernate.dialect.PostgreSQLDialect 

我如何配置Hibernate把周圍的表名引號?

+2

我會強烈建議使用不同的表名。使用保留字將會給你帶來問題,而不僅僅是在Hibernate中。 – 2012-02-27 10:13:26

回答

7

您可以用反引號引用mapping塊中的表名。 Hibernate會轉換那些無論報價方法是基於方言數據庫:

static mapping = { 
    table "`user`" 
} 

您也可以只表重命名爲別的東西,不要求報價/轉義,例如

static mapping = { 
    table "users" 
} 
1

假設你follwing相同的教程和我一樣(「Grails的入門」由InfoQ)你已經明白它不提供任何覆蓋到PostgreSQL。基於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`' 
    } 
}