Hibernate 是壹個開放源代碼的對象/關系映射框架和查詢服務。它對 JDBC 進行了輕量級的對象封裝,負責從 Java 類映射到數據庫表,並從 Java 數據類型映射到 SQL 數據類型。在 4.0 版本 Hibenate 開始支持多租戶架構——對不同租戶使用獨立數據庫或獨立 Sechma,並計劃在 5.0 中支持***享數據表模式。
在 Hibernate 4.0 中的多租戶模式有三種,通過 hibernate.multiTenancy 屬性有下面幾種配置:
NONE:非多租戶,為默認值。
SCHEMA:壹個租戶壹個 Schema。
DATABASE:壹個租戶壹個 database。
DISCRIMINATOR:租戶***享數據表。計劃在 Hibernate5 中實現
EclipseLink
EclipseLink 是 Eclipse 基金會管理下的開源持久層服務項目,為 Java 開發人員與各種數據服務(比如:數據庫、web services、對象XML映射(OXM)、企業信息系統(EIS)等)交互提供了壹個可擴展框架,目前支持的持久層標準中包括:
Java Persistence API (JPA)
Java Architecture for XML Binding (JAXB)
Java Connector Architecture (JCA)
Service Data Objects (SDO)
EclipseLink 前身是 Oracle TopLink, 2007年 Oracle 將後者絕大部分捐獻給了 Eclipse 基金會,次年 EclipseLink 被 Sun 挑選成為 JPA 2.0 的參考實現。
註: 目前 EclipseLink2.5 完全支持 2013 年發布的 JPA2.1(JSR 338) 。
在完整實現 JPA 標準之外,針對 SaaS 環境,在多租戶的隔離方面 EclipseLink 提供了很好的支持以及靈活地解決方案。
應用程序隔離
隔離的容器/應用服務器
***享容器/應用服務器的應用程序隔離
同壹應用程序內的***享緩存但隔離的 entity manager factory
***享的 entity manager factory 但每隔離的 entity manager
數據隔離
隔離的數據庫
隔離的Schema/表空間
隔離的表
***享表但隔離的行
查詢過濾
Oracle Virtual Private Database (VPD)
對於多租戶數據源隔離主要有以下方案
Single-Table Multi-tenancy,依靠租戶區分列(tenant discriminator columns)來隔離表的行,實現多租戶***享表。
Table-Per-Tenant Multi-tenancy,依靠表的租戶區分(table tenant discriminator)來隔離表,實現壹租戶壹個表,大體類似於上文的***享數據庫獨立Schema模式。
Virtual Private Database(VPD ) Multi-tenancy,依靠 Oracle VPD 自身的安全訪問策略(基於動態SQL where子句特性),實現多租戶***享表。
推薦閱讀這篇文章:/java/j-lo-dataMultitenant/,講的不錯。