Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA 2.0无供应商特定功能的多租户关系_Java_Jpa_Jpa 2.0_Entity Relationship_Multi Tenant - Fatal编程技术网

Java JPA 2.0无供应商特定功能的多租户关系

Java JPA 2.0无供应商特定功能的多租户关系,java,jpa,jpa-2.0,entity-relationship,multi-tenant,Java,Jpa,Jpa 2.0,Entity Relationship,Multi Tenant,我尝试实现多租户支持。 给定的限制和约束: JPA2.0(JavaEE6)没有特定于供应商的功能(Hibernate、EclipseLink等) 共享方案多租户级别。基本上每个表都有一个唯一的字符串和租户鉴别器作为主键(Id,TenantKey) 我的第一次尝试是将id和租户密钥映射为复合主键和@IdClass。所以我所有的实体基本上都是这样的: @Entity @IdClass(value = any.EntityPK) public class Entity { private St

我尝试实现多租户支持。 给定的限制和约束:

  • JPA2.0(JavaEE6)没有特定于供应商的功能(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)
我没有看到正确的JPA映射用于这个特定的“一家公司”关系。JPA要求表B中的租户密钥有一个冗余列,我无法提供:

Table B(ID, tenantKey, AnyColumnTableB, ForeignKey_ID_TableA, ForeignKey_TenantKey_TableA)
e.g. Table B(23, t01, Foo, 23, t01)
同样的问题也发生在其他关系类型上。我认为这是一个常见的问题,也许我的解决方案走错了方向。因此,请向我展示正确的映射,或者指导我在方案级别实现多租户支持的正确方法