gpt4 book ai didi

java - Spring Boot + JPA + Hibernate 不同表名前缀

转载 作者:行者123 更新时间:2023-11-30 02:10:41 27 4
gpt4 key购买 nike

我正在开发一个 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com