没有供应商特定功能的JPA 2.0多租户关系

时间:2016-05-11 11:17:08

标签: java jpa jpa-2.0 entity-relationship multi-tenant

我尝试实施多租户支持。 鉴于限制和约束:

  • 没有供应商特定功能的JPA 2.0(Java EE 6)(Hibernate,EclipseLink,...)
  • 共享方案多租户级别。基本上每个表都有一个唯一的字符串和租户鉴别器作为主键(Id,TenantKey)

我的第一个尝试是将id和租户密钥映射为复合主键和@IdClass。所以我的所有实体基本上都是这样的:

@Entity
@IdClass(value = any.EntityPK)
public class Entity
{
  private String id;
  private String tenantKey;

  //....
}

不幸的是,使用此解决方案,无法映射任何关系,因为租户密钥无法映射两次。例如,我跟随" OneToMany"数据库上的关系:

Table A (ID, tenantKey, AnyColumnTableA)
Table B (ID, tenantKey, AnyColumnTableB, ForeignKey_ID_TableA)

示例数据:

Table A(23, t01, Hello)
Table B(44, t01, Foo, 23)
Table B(45, t01, Bar, 23)

我没有看到针对此特定" OneToMany"的正确JPA映射。关系。 JPA要求表B中的租户密钥使用冗余列,我无法提供:

Table B(ID, tenantKey, AnyColumnTableB, ForeignKey_ID_TableA, ForeignKey_TenantKey_TableA)
e.g. Table B(23, t01, Foo, 23, t01)

其他关系类型也会出现同样的问题。我认为这是一个常见的问题,也许我的解决方案错误。所以请向我展示正确的映射或指导我在方案级别实施多租户支持的正确方法。

0 个答案:

没有答案