gpt4 book ai didi

java - 根据session动态选择数据库

转载 作者:可可西里 更新时间:2023-11-01 08:25:07 25 4
gpt4 key购买 nike

我正在使用 JPA 和 WildFly 10。

假设两家不同的公司都订阅了我的应用程序。理想情况下,我想使用 JPA 将两家公司的数据拆分到单独的数据库中,或者至少,单独的前缀表中。如果用户登录 http://example.com/company1/ , 看起来应用程序与运行在 http://example.com/company2/ 的应用程序完全分开,而实际上,“两个”应用程序是一个应用程序的一部分。

多个用户可能同时从不同的公司登录,因此所使用的数据库应该是基于 session 的。

将数据拆分到单独的表或数据库中的主要原因是为了更好地组织。使用一个应用程序而不是多个应用程序的原因是允许水平缩放。

我已经看到声明创建多个 persistence.xml 文件的答案,但是我的应用程序应该根据当前处于 Activity 状态的订阅动态创建和删除数据库或表。把它想象成一个网络托管公司,只要你付款,你就可以登录并开始在你的网站上工作;这就是我前进的方向。因此,我不能将不同的公司硬编码到程序中。

如何使用 JPA 完成此操作?有可能吗?或者是否有更好的方法来实现我所寻求的目标?

最佳答案

您正在尝试让您的应用程序支持 Multi-Tenancy 。我知道的一种方法是:

  • 在每个包含租户预定义值的数据库表中使用一个字段。
  • 当请求来自当前租户时设置当前租户

  • 然后使用 Hibernate 过滤功能自动过滤租户特定的数据。激活过滤器后,每个查询都将仅返回特定于当前租户的数据。

注意:在 Hibernate Session 对象上设置了一个 Hibernate 过滤器。如果您使用纯 JPA,实体管理器接口(interface)有一个名为 getDelegate() 的方法,它返回一个 Hibernate session 对象。

Here是指向有关 Hibernate 过滤器的信息的链接。在 Internet 上也有关于如何使用它们的教程。

关于java - 根据session动态选择数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38407521/

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