Автоматическое экранирование зарезервированных слов для таблиц и столбцов Hibernate - PullRequest
23 голосов
/ 29 июля 2010

Я пытаюсь использовать одно отображение Hibernate для нескольких разных баз данных: H2, Oracle, MySql.

Каждая база данных имеет свой список зарезервированных слов.

Я бы хотел, чтобы Hibernate автоматически экранировал зарезервированные слова.

Я знаю, что могу:

  • использование обратных кавычек для принудительного выхода (избегайте всего, чтобы быть в безопасности)
  • изменить все идентификаторы, чтобы они не были ключевыми словами в любой базе данных (делают их безобразными)
  • привязывает схему к определенному набору баз данных, избегая объединения ключевых слов (сломается, если я добавлю новую базу данных в смесь)

Есть ли более элегантное решение?

1 Ответ

31 голосов
/ 30 июля 2010

AFAIK, Hibernate не поддерживает список зарезервированных ключевых слов (для каждой базы данных), поэтому я думаю, что вы должны посмотреть на экранирование идентификатора базы данных.

Если вы используете Hibernate 3.5+, попробуйте hibernate.globally_quoted_identifiers=true, чтобы процитироватьвсе идентификаторы базы данных (это то, что они добавили для JPA 2.0, см. раздел 2.13 Именование объектов базы данных спецификации для способа JPA, чтобы активировать это, если вы используете JPA).

До версии 3.5 Hibernate не предлагал опций конфигурации для глобального экранирования.Рекомендованным способом является реализация пользовательского NamingStrategy для прозрачного экранирования всего.

См. Также

...