Spring Boot + JPA + Hibernate不同的表名前缀

时间:2018-05-05 08:56:05

标签: java spring hibernate spring-boot jpa

我正在开发一个多租户应用程序(具有旧的数据库结构),我有一个共同的用户表和一组基于访问权限的表。

例如,如果用户可以使用不同公司C1和C2的发票,则数据库包含名称为C1_invoice和C2_invoice的表。

我可以使用 org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

为一家公司添加前缀

所以我可以访问 C1_invoice 表。但是如何动态选择前缀C1或C2?

1 个答案:

答案 0 :(得分:2)

您可以使用this approach的变体。

它基本上是通过提供自定义MultiTenantConnectionProvider在Spring Data中使用hibernate的多租户功能。连接提供程序从数据源映射中读取连接详细信息。您可以为每个数据源中的hibernate.physical_naming_strategy提供不同的值。我不确定是否有办法将每个数据源的前缀指定为属性。对于每个租户,您最终可能会得到PhysicalNamingStrategy的单独子类。可能很可怕。

你在使用什么数据库?或者,您可以通过为每个租户提供一个架构来解决问题,并使用未加前缀的名称对其默认架构中的表进行别名,这些内容类似于:

CREATE SYNONYM C1.INVOICE FOR DEFAULT.C1_INVOICE;

这样,您可以使用Hibernate的标准MultitenancyStrategy.SCHEMA策略。