[英]How to use same Persistence Unit to access different datasources with the same entities using EntityManager and EntityManagerFactory
我目前正在使用 Java 17、Wildfly 25.0.1 和 JPA,超過 Hibernate 5.3。
我有一個應用程序使用映射的注釋和實體來訪問單個數據庫。 我正在使用帶有數據源的 PersistenceUnit,它工作正常。
我想要實現的是以編程方式選擇具有相同 PersistenceUnit 的不同數據源,以便為不同的客戶訪問同一數據庫的不同副本。 客戶數量會增加,所以我不能使用多個 PU。
到目前為止,我已經使用了一個注入的 EntityManager,如下所示:
@PersistenceContext(unitName = PERSISTENCE_UNIT)
protected EntityManager em;
我朝着創建自己的 EntityManager 實例的方向前進,所以我嘗試注入 EntityManagerFactory 而不是 EntityManager 本身:
@PersistenceUnit(unitName = PERSISTENCE_UNIT)
EntityManagerFactory emf;
最初注入的EntityManager,經過檢查,屬於class org.jboss.as.jpa.container.TransactionScopedEntityManager。 但是,當我使用注入的 EntityManagerFactory 創建 EntityManager 時,我收到的是 org.hibernate.internal.SessionImpl。
關鍵是,雖然很多事情都可以正常工作,但應用程序中的行為有些不同。 這是一個非常大的應用程序,有很多事務,有時數據不正確等等。
有什么方法可以創建或向服務器請求 TransactionScopedEntityManager? 我已經搜索過 Wildfly 源代碼,但找不到。
此外,任何其他實現此目標的方法都將受到贊賞。
謝謝和親切的問候。
您可以通過實現MultitenantConnectionProvider
和CurrentTenantIdentifierResolver
來使用Hibernate 的 Mulit 租戶設施來實現多租戶,這需要訪問您的 Session / Transaction Context。 這是關於Baeldung的教程。
免責聲明:我不熟悉 Wildfly,所以也許有一種本地方法可以做到這一點,類似於 Springs RoutingDataSource(請參閱問題中的 XtremerBaumers 評論)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.