我正在开发一个多租户应用程序(具有旧的数据库结构),我有一个共同的用户表和一组基于访问权限的表。
例如,如果用户可以使用不同公司C1和C2的发票,则数据库包含名称为C1_invoice和C2_invoice的表。
我可以使用 org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
为一家公司添加前缀所以我可以访问 C1_invoice 表。但是如何动态选择前缀C1或C2?
答案 0 :(得分:2)
您可以使用this approach的变体。
它基本上是通过提供自定义MultiTenantConnectionProvider
在Spring Data中使用hibernate的多租户功能。连接提供程序从数据源映射中读取连接详细信息。您可以为每个数据源中的hibernate.physical_naming_strategy
提供不同的值。我不确定是否有办法将每个数据源的前缀指定为属性。对于每个租户,您最终可能会得到PhysicalNamingStrategy
的单独子类。可能很可怕。
你在使用什么数据库?或者,您可以通过为每个租户提供一个架构来解决问题,并使用未加前缀的名称对其默认架构中的表进行别名,这些内容类似于:
CREATE SYNONYM C1.INVOICE FOR DEFAULT.C1_INVOICE;
这样,您可以使用Hibernate的标准MultitenancyStrategy.SCHEMA
策略。