一尘不染

Spring + Hibernate + JPA +多个数据库

hibernate

我有一个Spring + Hibernate +
JPA应用程序。用户登录时,可以从要连接的数据库列表中进行选择(这是要求)。所有数据库都有相同的架构,因此将使用相同的实体和DAO。

现在,我有一个EntityManager(目前正在使用一个数据库),它被注入到DAO中,如下所示:

@PersistenceContext
private EntityManager entityManager;

有什么方法可以让DAO根据从服务层接收到的参数/属性自动接收entityManager(由Spring管理)?(Web层发送一种上下文,所选数据库的名称/代码/
ID将在其中)。

还是我必须亲自管理(创建所有的entityManager,将它们放置在地图中,并告诉DAO每个调用使用哪一个)?

在问这个问题之前,我进行了一些研究,但结果尚无定论-大多数问题涉及一个模型,该模型分布在2个或多个DB上,并且涉及跨多个DB的事务,但对我而言并非如此。

就我而言,一旦用户连接,就好像他连接到只有一个实体管理器的应用程序一样,该实体管理器就是他选择的数据库。DB的中间会话或任何其他类似的东西之间没有切换。

谢谢。


阅读 310

收藏
2020-06-20

共1个答案

一尘不染

此功能称为多租户。

Hibernate 4应该开箱即用地支持它,尽管我不确定它是否可以与Spring-managed集成EntityManager

或者,最简单的方法是在某个ConnectionProvider级别或DataSource某个级别拦截数据库连接的创建,然后根据存储在ThreadLocal变量中的租户标识符选择合适的数据库。

也可以看看:

2020-06-20