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
Jpa eclipselink multitenant:检索错误的user.roles_Jpa_Eclipselink_Multi Tenant - Fatal编程技术网

Jpa eclipselink multitenant:检索错误的user.roles

Jpa eclipselink multitenant:检索错误的user.roles,jpa,eclipselink,multi-tenant,Jpa,Eclipselink,Multi Tenant,使用EclipseLink 2.5.1 角色是单表多租户。每个租户都有自己的角色。 用户不是多租户,由所有租户共享 用户/角色:多个映射 用户有一组角色: @ManyToMany(fetch = FetchType.EAGER) @JoinTable(name = "UserRole", joinColumns = {@JoinColumn(name = "uId")}, inverseJoinColumns = {@Jo

使用EclipseLink 2.5.1

角色是单表多租户。每个租户都有自己的角色。 用户不是多租户,由所有租户共享

用户/角色:多个映射

用户有一组角色:

    @ManyToMany(fetch = FetchType.EAGER)
    @JoinTable(name = "UserRole", 
             joinColumns = {@JoinColumn(name = "uId")},  
             inverseJoinColumns = {@JoinColumn(name = "rId")})
  public Set<Role> getRoles() {
    return roles;
  }
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name=“UserRole”,
joinColumns={@JoinColumn(name=“uId”)},
inverseJoinColumns={@JoinColumn(name=“rId”)}
公共集getRoles(){
返回角色;
}
角色没有对用户的引用

<entity class="Role" > 
    <multitenant>
        <tenant-discriminator-column name="tenantId" context-property="tenant.id"
            discriminator-type="INTEGER"/>      
    </multitenant>  
</entity>

用户不是多租户

在一个租户中列出用户时,用户的角色应限于该租户。 但是JPA返回所有tetants中该用户的所有角色


如何解决这个问题?谢谢。

我不确定您是如何绘制此地图的,但您不应该。不要缓存用户中的角色(这会让您面临许多问题),而是在需要时查询与用户关联的角色。您可以保留一个角色->用户映射以使其更简单,但删除用户->角色。观察到一件事。EclipseLink仅为查询结果中的第一个用户重新获取当前租户的角色。因此,第一个用户的角色对于当前租户是正确的。为当前租户读入的其他用户是否已通过其他租户读入?如果是这样,请检查用户->角色映射是否未缓存在共享缓存中-您需要显示映射和设置堆栈,并进行编辑以添加映射和多租户配置。它们不会被缓存。刷新新的启动服务器(Tomcat),然后列出所有用户。只有第一个用户才能获得当前租户的正确角色。