Java 具有多个数据库的JPA(Hibernate)

Java 具有多个数据库的JPA(Hibernate),java,hibernate,jpa,jpa-2.0,Java,Hibernate,Jpa,Jpa 2.0,我在工作中发现了一个挑战: 我们有一个java web应用程序和几个数据库,每个客户一个,每个客户有相同的数据库/元数据。此外,还有一个中央数据库,用于保存客户信息,如数据库URL等 在登录屏幕上,用户通知客户ID、登录名和密码,点击登录按钮,然后首先web应用程序转到中央数据库以查找客户数据库的URL。我为其创建了一个单独的实体管理器工厂,然后返回并为该客户数据库创建一个新的实体管理器工厂。到目前为止还不错,我可以看到客户1的数据 但是,当我注销并尝试使用不同的客户ID(这意味着不同的数据库)

我在工作中发现了一个挑战: 我们有一个java web应用程序和几个数据库,每个客户一个,每个客户有相同的数据库/元数据。此外,还有一个中央数据库,用于保存客户信息,如数据库URL等

在登录屏幕上,用户通知客户ID、登录名和密码,点击登录按钮,然后首先web应用程序转到中央数据库以查找客户数据库的URL。我为其创建了一个单独的实体管理器工厂,然后返回并为该客户数据库创建一个新的实体管理器工厂。到目前为止还不错,我可以看到客户1的数据

但是,当我注销并尝试使用不同的客户ID(这意味着不同的数据库)登录时,以前创建的entity manager工厂仍然连接到以前客户的数据库,即使应用程序通过包含新数据库url的参数映射

我的问题是,是否有一种方法可以让JPA连接到不同的数据库,而不必为每个客户创建EntityManager工厂。我知道EntityManagerFactory对象缓存所有数据库元数据,所以有没有办法更改(比如)数据库url属性并刷新工厂

谢谢,

Gyo

我的问题是,是否有一种方法可以让JPA连接到不同的数据库,而不必为每个客户创建EntityManager工厂

我不这么认为

请看纳扬人的回答:了解更多信息

我的问题是,是否有一种方法可以让JPA连接到不同的数据库,而不必为每个客户创建EntityManager工厂

我不这么认为


查看Nayans的回答:了解更多信息。

事实上,在谷歌上挖掘之后,我发现Hibernate 4.x引入了,这就是我需要的。下一个挑战是从纯JPA来实现,而不是直接使用Hibernate,并且认为这会很困难。

事实上,在谷歌上挖掘之后,我发现Hibernate 4.x引入了它,这就是我需要的。下一个挑战是从纯JPA来完成,而不是直接使用Hibernate,并且认为这将很困难。

您可以尝试Hibernate 4多租户功能,我也使用过它。只需按照文档说明如何配置即可


如果您已经使用JPA,只需将JPA提供程序更改为使用Hibernate即可。EntityManager只是Hibernate会话的包装器。Hibernate将自动切换数据库连接,只要您提供CurrentTenantIdentifierResolver的实现

您可以尝试Hibernate 4多租户功能,我也使用过它。只需按照文档说明如何配置即可


如果您已经使用JPA,只需将JPA提供程序更改为使用Hibernate即可。EntityManager只是Hibernate会话的包装器。Hibernate将自动切换数据库连接,只要您提供CurrentTenantIdentifierResolver的实现。

事实上,在谷歌上挖掘之后,我发现Hibernate 4.x引入了多租户支持,这正是我需要的。@gyo我不知道这一点。您应该创建并接受一个答案,以便其他人可以学习。事实上,在谷歌上挖掘之后,我发现Hibernate 4.x引入了多租户支持,这正是我需要的。@gyo我不知道这一点。您应该创建并接受答案,以便其他人可以学习。