【发布时间】:2022-12-11 04:00:02
【问题描述】:
我目前在 Hibernate 5.3 上使用 Java 17、Wildfly 25.0.1 和 JPA。
我有一个应用程序使用映射的注释和实体来访问单个数据库。我正在使用带有数据源的 PersistenceUnit,它工作正常。
我想要实现的是以编程方式选择具有相同 PersistenceUnit 的不同数据源,以便为不同的客户访问同一数据库的不同副本。客户数量会增加,所以我不能使用多个 PU。
到目前为止,我已经使用了一个注入的 EntityManager,如下所示:
@PersistenceContext(unitName = PERSISTENCE_UNIT)
protected EntityManager em;
我朝着创建自己的 EntityManager 实例的方向前进,所以我尝试注入 EntityManagerFactory 而不是 EntityManager 本身:
@PersistenceUnit(unitName = PERSISTENCE_UNIT)
EntityManagerFactory emf;
最初注入的 EntityManager,经过检查,属于类 org.jboss.as.jpa.container.TransactionScopedEntityManager。 但是,当我使用注入的 EntityManagerFactory 创建 EntityManager 时,我收到的是 org.hibernate.internal.SessionImpl。
关键是,虽然很多事情都可以正常工作,但应用程序中的行为有些不同。这是一个非常大的应用程序,有很多事务,有时数据不正确等等。
有什么方法可以创建或向服务器请求 TransactionScopedEntityManager?我已经搜索过 Wildfly 源代码,但找不到。
此外,任何其他实现此目标的方法都将受到赞赏。
谢谢和亲切的问候。
【问题讨论】:
-
这听起来更像是你想要一个
RoutingDataSource。或者您加载的不同配置文件取决于谁使用该应用程序
标签: java jpa entitymanager persistence-unit entitymanagerfactory