2015-07-30 15 views
1

Мне нужно добавить глобальный префикс для всех моих объектов базы данных, таких как таблицы и ограничения, так что, когда я извлечу схему DDL, все будет хорошо и правильно.JPA: Можно ли добавить глобальный префикс к именам ограничений?

Я знаю, как указать имена ограничений (as described here) в моем Java-коде.

Я также знаю, как добавить глобальный префикс к таблицам, as described here. Это то, что я сейчас реализовал в своем проекте.

Что я НЕ знаю, как добавить тот же самый глобальный префикс к именам ограничений. Вы видите, когда зимует создает все таблицы базы данных и ограничений, он делает такие вещи, как это:

Hibernate: alter table ABC_MYTABLE1 add constraint UK_MYTABLE1_COLUMN1 unique (column1) 
Hibernate: alter table ABC_MYTABLE1 add constraint UK_MYTABLE1_COLUMN2 unique (column2) 
Hibernate: alter table ABC_MYTABLE2 add constraint UK_MYTABLE2_COLUMN1 unique (column1) 
Hibernate: alter table ABC_MYTABLE2 add constraint UK_MYTABLE2_COLUMN2 unique (column2) 
... 

С «ABC» быть моим глобальным префиксом. Обратите внимание на то, что имена ограничений не имеют префикса? В чем я действительно нуждаюсь:

Hibernate: alter table ABC_MYTABLE1 add constraint ABC_UK_MYTABLE1_COLUMN1 unique (column1) 
Hibernate: alter table ABC_MYTABLE1 add constraint ABC_UK_MYTABLE1_COLUMN2 unique (column2) 
Hibernate: alter table ABC_MYTABLE2 add constraint ABC_UK_MYTABLE2_COLUMN1 unique (column1) 
Hibernate: alter table ABC_MYTABLE2 add constraint ABC_UK_MYTABLE2_COLUMN2 unique (column2) 
... 

На этот раз имена таблиц и ограничений имеют префикс.

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

Моя текущая проблема заключается в том, что классы NamingStrategy, похоже, не могут каким-либо образом модифицировать имена ограничений. Я много гугл, но все, что я нашел, это билеты на официальных сайтах Hibernate, которые могут или не могут быть связаны с этой проблемой. В любом случае, они все еще открыты для билетов.

Есть ли какие-либо решения? Я не хочу, чтобы моя схема заканчивалась половиной моих объектов/ограничений, пропускающих необходимый префикс.

Должен сказать, я нахожу его немного неряшливым из них, чтобы обеспечить механизм для изменения стратегии именования таблиц, но полностью игнорировать ограничения.

+0

Какую версию спящего режима вы используете? – javadev

+0

@javadev: 4.3.8. Финал – Certainly

ответ

0

Похоже, что это будет легко сделать с Hibernate 5.0 (или 6?), Когда имя FK будет в одном из интерфейсов стратегии именования (см. details here).

+0

Я вижу. Я пока не нашел решения. Если ждать еще одной крупной версии - все, что можно сделать, я думаю, это не оставляет мне выбора. Спасибо. – Certainly