Hibernate多租户,具有部分共享表和每个租户的多个架构

jw5wzhpr  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(224)

我对使用Hibernate多租户解决以下问题很感兴趣:
我正在开发的一个JSF、JPA应用程序访问一个DB2(AS400)数据库,但目前该应用程序可以在两个环境中运行。在这些环境之间,一些表是共享的,但另一些表存在于不同的架构中,并且有两个这样的架构具有此属性。更清楚地说,它是这样的:应用程序具有环境Alpha和Beta,并且具有类A、B和C。在Alpha环境中,A对应于模式S1_1中的表T1,B对应于表T2和S1_2。在Beta中,表名是相同的,但A具有模式S2_1,而B具有模式S2_2。在两个环境中,C对应于模式S1中的表T3。所有的表和数据库都在同一个数据库上。没有修改现有表或架构的结构的选项。
多租户是处理这种情况的可行方法吗?我看过一些文章说Hibernate多租户支持相同的数据库不同的模式,但我不知道这是指“相同的数据库,但每个租户有一个不同的模式”,还是“相同的数据库,每个租户有任意多个模式”。此外,我不确定它是否能支持两者之间的任何共享模式。
查看this article,作者只是将模式设置为租户标识符,但这在我的情况下不起作用,因为一个标识符对应于多个模式(Alpha到S1和S2),一个模式可以对应多个标识符(S1到Alpha和Beta)。这意味着在形成有效连接之前,需要知道租户标识符和正在访问的资源。即使这样,也假设连接没有被重用(我不知道提供的连接的生命周期),并且不存在跨模式的联接,因为模式似乎是为每个连接设置的。
尽管我提出了很多问题,但我有以下几个主要问题:
1.当租户标识符和模式之间存在多对多关联时,是否支持Hibernate多租户?
1.有没有办法知道Hibernate多租户接口/超类中正在为其形成连接的请求?
1.如果多租户在这种情况下不能工作,在Hibernate/JPA中还有其他可能的选择吗?

dldeef67

dldeef671#

您可以通过指定@Table(name = "T3", schema = "S1")为实体C配置显式架构。这样,您可以对常规实体使用基于模式的多租户,但让一个实体引用固定模式中的表。

相关问题