【问题标题】:Schema based multi-tenancy with hibernate on MS SQL Server在 MS SQL Server 上使用休眠模式的基于模式的多租户
【发布时间】:2018-04-27 10:13:43
【问题描述】:

我正在实现一个基于 Java 8、Spring Boot 2 和 JPA/Hibernate 5 的多租户应用程序

对此有不同的方法,我选择了基于模式的方法。 Hibernate docs 也写了对此的支持。

我也看了一些tutorials

但似乎网络上的每个人都使用本机 SQL 来切换模式。我不仅必须支持多个 DBMS - 而且我可以提供不同的实现 - 但似乎 MS SQL Server 不支持仅在连接期间设置架构

在 JDBC Connection 对象上有一个setSchema(String) 方法,但是MS does not support it(也可以通过查看它们在 Github 上的源代码来验证)。不仅如此,我也找不到使用 T-SQL 的方法。

是否有另一种方法可以在我的 ConnectionProvider 中设置连接架构,或者我必须切换到完全不同的方法(例如,基于鉴别器列)?

仅供参考,架构必须是动态的,因为可以通过 UI 创建租户。

【问题讨论】:

    标签: sql-server spring hibernate jpa multi-tenant


    【解决方案1】:

    恕我直言,最适合您的应用程序需求的多租户策略,本来应该是 COLUMN DISCRIMINATOR 策略......但它仍在开发中,并且在最新的 Hibernate 5.3.2 版本中不可用。

    仅供参考,架构必须是动态的,因为可以通过 UI 创建租户。

    由于某些原因,使用具有这种高可移植性要求的模式策略很难实现:

    • 架构概念因数据库供应商而异
    • Hibernate 多租户解决方案还很轻便

    我建议,您降低可移植性要求,只选择为您提供有效多租户模式策略工具的数据库供应商。

    【讨论】:

    • 我们切换到手动实现的基于鉴别器列的方法
    • @Benjamin Maurer:这是当前 Hibernate 5.3 版本的最佳选择。在未来的版本中,你仍有可能,让坚持带头。检查 EclipseLink 列鉴别器的方式。解决办法,做好准备。顺便说一句,使用单列鉴别器,很容易切换到持久性供应商解决方案。切换的两个关键因素是: 1. 供应商解决方案在数据查询/更新方面的效率。 2.您的代码清理和更面向业务。
    猜你喜欢
    • 2013-03-30
    • 1970-01-01
    • 2020-02-02
    • 2012-01-11
    • 2018-02-20
    • 2020-06-26
    • 2022-09-27
    • 2021-05-05
    • 1970-01-01
    相关资源
    最近更新 更多