我们的应用程序项目是一个使用JPA和EclipseLink和JTA的OSGI包,需要单表多租户,其中租户ID来自REST请求。从我所阅读和尝试的内容来看,这似乎是不可能的:
PersistenceContext
(EntityManager
)。@PersistenceUnit
的说法,使用JTA时不能手动创建持久化上下文(Persistence.createEntityManagerFactory
没有注入,http://tomee.apache.org/jpa-concepts.html不起作用)。我错过了什么吗?或者这根本不可能做到?
您可以在实体管理器中为请求设置多租户/鉴别器属性。但它对于多线程和延迟初始化是不安全的。
我尝试了支持单表多租户的CMobileCom JPA。对于每个租户,应使用新的EntityManager。也就是说,不应共享EntityManager来访问多个租户的数据。 EclipseLink也是如此。
免责声明:我是CMobileCom JPA的开发人员,这是一个针对Java和Android的轻量级JPA实现。