EclipseLink (JPA) 基于 table 的多租户与 JTA,如何?



我们的应用程序项目是一个使用 JPA 和 EclipseLink 和 JTA 的 OSGI 捆绑包,需要单表多租户,其中租户 ID 来自 REST 请求。从我所阅读和尝试的内容来看,这似乎是不可能的:

  1. 由于租户 ID 会根据请求而变化,因此每个具有新租户 ID 的请求都需要手动创建一个具有相应属性的新PersistenceContext(EntityManager(。
  2. 但是根据 http://tomee.apache.org/jpa-concepts.html 的说法,使用JTA时无法手动创建持久性上下文(@PersistenceUnit不会被注入并且Persistence.createEntityManagerFactory不起作用(。

我错过了什么吗?或者这真的不可能做到吗?

您可以在实体管理器中为请求设置多租户/鉴别器属性。但是对于多线程和延迟初始化来说并不安全。

我尝试了支持单表多租户的CMobileCom JPA。对于每个租户,应使用新的实体管理器。也就是说,不应共享实体管理器来访问多个租户的数据。EclipseLink 也是如此。

免责声明:我是CMobileCom JPA的开发人员,CMobileCom JPA是Java和Android的轻量级JPA实现。

最新更新