Spring Boot + JPA + Hibernate другой префикс имени таблицы - PullRequest
0 голосов
/ 05 мая 2018

Я работаю над мультитенантным приложением (со старой структурой базы данных), где у меня есть общая таблица user и набор таблиц на основе разрешения доступа.

Например, если пользователь может работать со счетами разных компаний C1 и C2, база данных содержит таблицы с именами C1_invoice и C2_invoice.

Я могу добавить префикс для одной компании, используя org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

Так что я могу получить доступ к таблице C1_invoice . Но как я могу динамически выбрать префикс C1 или C2?

1 Ответ

0 голосов
/ 05 мая 2018

Вы можете использовать вариант , этот подход .

Он в основном использует функции многопользовательского режима Hibernate в Spring Data, предоставляя пользовательский MultiTenantConnectionProvider. Поставщик соединения считывает сведения о соединении с карты источников данных. Вы можете указать другое значение для hibernate.physical_naming_strategy в каждом из источников данных. Однако я не уверен, есть ли способ указать префикс для каждого источника данных в качестве свойства. Вы можете получить отдельный подкласс PhysicalNamingStrategy для каждого арендатора. Может быть ужасно.

Какую БД вы используете? В качестве альтернативы, вы могли бы решить проблему, предоставив схему для каждого арендатора и сопоставив их таблицы со схемой по умолчанию, используя имена без префиксов, что-то вроде:

CREATE SYNONYM C1.INVOICE FOR DEFAULT.C1_INVOICE;

Таким образом, вы можете использовать стандартную стратегию Hibernate MultitenancyStrategy.SCHEMA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...