我有一个实体 bean,它将代表多个数据库/数据源的预期结果,也可以是执行的不同查询,但总是返回相同的结果。因此,bean 可以在应该能够动态选择的不同数据源上重复使用。
JPA 是否可以在运行时选择用于执行查询的数据源,并返回相同类型的实体 bean?另外,我的 ejb/应用程序是否需要定义将要使用的数据源?或者我总是可以通过 jndi 指定要使用的数据源吗?每次创建新数据源时都不能修改描述符并重新部署应用程序。
对不起,如果这个问题没有 100% 的意义,很难理解这个想法。
我有一个实体 bean,它将代表多个数据库/数据源的预期结果,也可以是执行的不同查询,但总是返回相同的结果。因此,bean 可以在应该能够动态选择的不同数据源上重复使用。
JPA 是否可以在运行时选择用于执行查询的数据源,并返回相同类型的实体 bean?另外,我的 ejb/应用程序是否需要定义将要使用的数据源?或者我总是可以通过 jndi 指定要使用的数据源吗?每次创建新数据源时都不能修改描述符并重新部署应用程序。
对不起,如果这个问题没有 100% 的意义,很难理解这个想法。
JPA 是否可以在运行时选择用于执行查询的数据源,并返回相同类型的实体 bean?
您不能在运行时更改持久性单元的数据源。但是,您可以配置多个持久性单元并使用一个或另一个EntityManagerFactory
. 也许 JPA 不是适合您的用例的工具。
每次创建新数据源时都不能修改描述符并重新部署应用程序。
应用程序如何知道“可用数据源”?
您可以在运行时更改 JPA 数据源,但这种方法很棘手(自省、特定于 JPA 实现的......)。
我已经实现了我自己的实现,它javax.persistence.spi.PersistenceProvider
覆盖org.hibernate.ejb.HibernatePersistence
并在创建. 这样,我就有了一个在运行时配置的数据源。我保留我的直到应用程序被取消部署。Map
PersistenceUnitInfo
PersistenceProvider
EntityManagerFactory
EntityManagerFactory
EntityManagerFactory
您可以使用相同的方法并创建 N 个不同EntityManagerFactory
的,每个都有其特定的数据源。但是请记住,每个都ÈntityManagerFactory
使用大量内存。