Jpa eclipselink multitenant:检索错误的user.roles
使用EclipseLink 2.5.1 角色是单表多租户。每个租户都有自己的角色。 用户不是多租户,由所有租户共享 用户/角色:多个映射 用户有一组角色: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
@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),然后列出所有用户。只有第一个用户才能获得当前租户的正确角色。