пользовательская таблица с javaDB и Hibernate изнутри grails - PullRequest
4 голосов
/ 16 апреля 2010

посмотрим, смогу ли я спросить об этом в понятной форме ...

Я начал с grails и создал класс домена с именем user. Насколько я понимаю, Hibernate используется для сопоставления этого класса домена с базой данных. Это прекрасно работает с hsqldb.

Теперь я попытался переключиться на javaDB и получить сообщение об ошибке, потому что таблица называется «user» (что кажется зарезервированным словом для javaDB).

Так что утверждение типа

create table user ...

приведет к сообщению об ошибке.

create table "user" ...

работает, но Hibernate, похоже, не помещает имя таблицы в кавычки.

Как настроить Hibernate на использование кавычек, чтобы он работал с моим именем таблицы?

PS: да, я знаю, я мог бы сопоставить класс домена с другим именем таблицы ...: -)

Ответы [ 2 ]

1 голос
/ 16 апреля 2010

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

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

Обновление: Одним из следствий этого является то, что вам также придется настраивать имя таблиц объединения, используя ключевое слово joinTable. Это звучит разумно, но условности - это одно из преимуществ Grails, и не полагаться на них противоречит его философии. Лично я бы просто не использовал здесь зарезервированное слово (т.е. не user).

0 голосов
/ 17 апреля 2010

понял. Как уже упоминал Паскаль, ключом является запись сопоставления. Но вместо использования двойных кавычек обратный тик принесет успех:

static mapping = {
  table "`user"
}

это говорит hibernate указывать имя таблицы в кавычках при генерации sql. Кажется, что он также работает со всеми соответствующими таблицами ... но каким-то образом он удаляет последний символ "пользователя" в некоторых из них ...: - (

Таким образом, кажется, что на самом деле переназначение класса домена на имя таблицы, которое не вызовет никаких проблем, будет лучшим способом:

static mapping = {
  table "appuser"
}
...