Как настроить Hibernate, чтобы заключать в кавычки имена таблиц - PullRequest
4 голосов
/ 27 февраля 2012

У меня есть ситуация, когда я пытаюсь создать таблицу с именем 'user' в Postgres, которая выдает ошибку из-за того, что 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:

dialect = org.hibernate.dialect.PostgreSQLDialect

Как я могу настроить Hibernate для размещения кавычек вокруг имен таблиц при работе с Postgres?

Ответы [ 3 ]

8 голосов
/ 27 февраля 2012

Вы можете заключить в кавычки имя таблицы в блоке mapping. Hibernate преобразует их в любой подход к цитированию для базы данных на основе диалекта:

static mapping = {
    table "`user`"
}

Вы также можете просто переименовать таблицу в другое, не требующее цитирования / экранирования, например,

static mapping = {
    table "users"
}
4 голосов
/ 27 февраля 2012

Этот ответ может вам помочь: https://stackoverflow.com/a/3611916/947357 Он показывает, как заключать в кавычки имена таблиц в Hibernate и в JPA.

1 голос
/ 18 апреля 2013

Предполагая, что вы следуете тому же самому учебнику, что и я («Начало работы с Grails» от InfoQ), вы уже поняли, что он не предоставляет никакого охвата PostgreSQL. Основано на этом посте :

  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`' 
   } 
}
...