如何创建一个spring数据查询,该查询仅返回具有包含传递的用户对象的UserRole的实体?

时间:2015-11-25 14:52:07

标签: spring-data spring-data-jpa

我正在尝试编写一个spring数据jpa查询,该查询为我提供了所有仪表板实体,其中UserRole包含传递的(或当前的spring security principal)用户。

相关代码:

@Entity
public class Dashboard extends BaseModel {

    private String name;

    @ManyToMany
    private Set<UserRole> allowedUserRoles;     
}

@Entity    
public class UserRole {
    @Id
    @NotNull
    private String uid;

    @ManyToMany(mappedBy = "userRoles")
    private Set<User> users = new HashSet();
}

@Entity
public class User implements UserDetails {

    @Id
    @NotNull
    private String username;

    private String uuid;

    private String displayName;

    private String email;

    private boolean active = false;
    private boolean superadmin = false;

    @ManyToMany(fetch = FetchType.EAGER)
    private Set<UserRole> userRoles = new HashSet<>();
}

@RepositoryRestResource(collectionResourceRel = "dashboards", path = "dashboards")
public interface DashboardRepository extends JpaRepository<Dashboard, Long> {

    @Query("...")
    List<Dashboard> findWithPermission(User user);
}

最佳, 添

2 个答案:

答案 0 :(得分:1)

尝试使用MEMBER OF

@Query("SELECT DISTINCT d FROM Dashboard d WHERE :user MEMBER OF d.allowedUsers.users")

答案 1 :(得分:0)

传递的用户对象必须已经有一个ID,可能是您在查找用户名和密码时找到的,只需使用它来查找分配给用户的权限

最后的交叉表应该是

useridsxroleidxpermission1id useridsxroleidxpermission2id 等...