Автоматическое резервирование зарезервированного слова для таблиц и столбцов Hibernate

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

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

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

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

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

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

Ответ 1

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

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

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

См. также