我们有一个帐户的中央数据库。它包含登录信息和名为数据库配置文件的字段。数据库配置文件指示应该为帐户使用的数据库连接。例如,我们将有Profile1,Profile2,Profile3 ... ProfileN
如果用户被指示拥有Profile1,他们将使用与被指示为Profile2一部分的用户不同的数据库。
我对JPA的理解是,每个配置文件(持久性单元)都需要一个新的EntityManagerFactory,即使这些数据库都具有相同的模式,只有不同的连接信息。因此,如果我们最终拥有100个配置文件,我们将拥有100个实体经理工厂,这似乎并不理想。
我查看了EntityManagerFactory,它似乎不允许您更改数据库连接选项。
我唯一的选择是拥有N EntityManagerFactory,如果是这样,它们会对此产生任何重大影响(例如性能不佳)吗?
感谢您的任何建议。
答案 0 :(得分:3)
你所谈论的事情正在超出JPA抽象的范围。特定连接管理之类的东西通常更具体。例如,使用Hibernate SessionFactory,您当然可以create new sessions from an aribtraty JDBC connection。会有一些陷阱需要考虑,例如ID生成方案(你可能不得不使用在DB中生成的序列),并且你基本上已经用于L2缓存,但仔细编程就可以使它工作。
答案 1 :(得分:2)
只需使用javax.persistence.Persistence#createEntityMananagerFactory(String,Map)
,并在Map中提供连接参数。缓存EMF,明智地使用连接,不要混合来自不同EMF的n匹配对象。
答案 2 :(得分:2)
如果您使用的是spring,那么我知道有一种方法可以动态切换DataSource。查找更多信息here