1

我有一个实体 bean,它将代表多个数据库/数据源的预期结果,也可以是执行的不同查询,但总是返回相同的结果。因此,bean 可以在应该能够动态选择的不同数据源上重复使用。

JPA 是否可以在运行时选择用于执行查询的数据源,并返回相同类型的实体 bean?另外,我的 ejb/应用程序是否需要定义将要使用的数据源?或者我总是可以通过 jndi 指定要使用的数据源吗?每次创建新数据源时都不能修改描述符并重新部署应用程序。

对不起,如果这个问题没有 100% 的意义,很难理解这个想法。

4

2 回答 2

0

JPA 是否可以在运行时选择用于执行查询的数据源,并返回相同类型的实体 bean?

您不能在运行时更改持久性单元的数据源。但是,您可以配置多个持久性单元并使用一个或另一个EntityManagerFactory. 也许 JPA 不是适合您的用例的工具。

每次创建新数据源时都不能修改描述符并重新部署应用程序。

应用程序如何知道“可用数据源”?

于 2010-06-10T17:03:15.487 回答
0

您可以在运行时更改 JPA 数据源,但这种方法很棘手(自省、特定于 JPA 实现的......)。

我已经实现了我自己的实现,它javax.persistence.spi.PersistenceProvider覆盖org.hibernate.ejb.HibernatePersistence并在创建. 这样,我就有了一个在运行时配置的数据源。我保留我的直到应用程序被取消部署。MapPersistenceUnitInfoPersistenceProviderEntityManagerFactoryEntityManagerFactoryEntityManagerFactory

您可以使用相同的方法并创建 N 个不同EntityManagerFactory的,每个都有其特定的数据源。但是请记住,每个都ÈntityManagerFactory使用大量内存。

于 2014-01-16T09:18:17.183 回答