我正在开发一个 Multi-Tenancy 应用程序(具有旧的数据库结构),其中有一个通用的用户表和一组基于访问权限的表。
例如,如果用户可以使用不同公司 C1 和 C2 的发票,则数据库包含名为 C1_invoice 和 C2_invoice 的表。
我能够使用 org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl 向一家公司添加前缀
这样我就可以访问C1_invoice表。但如何动态选择前缀 C1 或 C2 呢?
最佳答案
您可以使用 this approach 的变体。
它基本上通过提供自定义MultiTenantConnectionProvider
来使用Spring Data中的hibernate Multi-Tenancy 功能。连接提供者从数据源映射中读取连接详细信息。您可以为每个数据源中的 hibernate.physical_naming_strategy
提供不同的值。不过,我不确定是否有办法将每个数据源的前缀指定为属性。您最终可能会为每个租户提供一个单独的 PhysicalNamingStrategy
子类。可能会很可怕。
您使用什么数据库?或者,您可以通过为每个租户提供一个架构,并使用不带前缀的名称为默认架构中的表设置别名来解决该问题,大致如下:
CREATE SYNONYM C1.INVOICE FOR DEFAULT.C1_INVOICE;
这样,您就可以使用 Hibernate 的标准 MultitenancyStrategy.SCHEMA
策略。
关于java - Spring Boot + JPA + Hibernate 不同表名前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50187589/