gpt4 book ai didi

hibernate - Spring + Hibernate + JPA + 多数据库

转载 作者:行者123 更新时间:2023-12-01 10:07:53 25 4
gpt4 key购买 nike

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

现在我有一个像这样注入(inject)到 DAO 中的 EntityManager(目前一直在使用一个数据库):

@PersistenceContext
private EntityManager entityManager;

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

还是我必须自己管理这个(创建所有的实体管理器,将它们放在一个映射中,告诉 DAO 每次调用使用它们中的哪一个)?

在提出这个问题之前,我做了一些研究,但结果尚无定论 - 大多数问题都涉及一个模型,该模型分布在 2 个或更多数据库和跨多个数据库的事务中,但对我而言并非如此。

在我的例子中,一旦用户连接,就好像他连接到一个只有一个实体管理器的应用程序,即他选择的数据库。在 DB 的中间 session 或任何其他类似内容之间没有切换。

谢谢。

最佳答案

此功能称为 Multi-Tenancy 。

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

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

另请参阅:

关于hibernate - Spring + Hibernate + JPA + 多数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8703242/

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