Spring 3.2.X和EclipseLink / Hibernate的多租户?

时间:2014-02-25 07:31:24

标签: hibernate eclipselink multi-tenant

我必须实现具有以下要求的多租户Web应用程序

  1. 单表多租户:特定实体的所有租户数据将存储在单个表中,每个表中都有TENANT_DISCRIMINATOR(TENANT_ID)作为列。

  2. 有些表格,例如主国家,大师......,我希望它对所有租户都是通用的,即在这些表中,不会有像TENANT_DISCRIMINATOR(TENANT_ID)这样的列,但仍然想要访问它无缝连接。

  3. 根据请求或维护原因,我想通过某些管理配置和我的网络应用程序将已经是单表多租户的一部分的租户数据移动到单独的数据库模式,反之亦然,在下一个请求中应该能够与更新的模式/数据源进行通信。

  4. 现在所有租户的单人桌。我用过

    org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean 
    

    并插入

    org.springframework.jdbc.datasource.DriverManagerDataSource
    
    进入那个。我想在这里有灵活性,它可以读取一些配置并帮助我决定相同的表/数据源或一些不同的数据源。

    前两点,我能够使用EclipseLink框架实现。

    我的问题是

    1. 是否可以使用EclipseLink实现第3点?

    2. hibernate 3+或4+可以帮助我实现这些吗?

    3. 任何帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

Eclipselink确实有一个远程命令,强制在运行的工厂上刷新元数据,以便获得的下一个EntityManager将使用新的元数据。这可能允许您使用自定义程序和/或元数据存储库来使用管理客户端更改租户结构,然后将这些更改推送到正在运行的应用程序。看到 http://wiki.eclipse.org/EclipseLink/DesignDocs/368490https://wiki.eclipse.org/EclipseLink/Examples/JPA/CacheCoordination