1

我有一个GrantedRole类允许跨一个或多个授予特定角色Site,例如:

public class GrantedRole {
    private RoleType role;

    private User granter;
    private User grantee;
    private Collection<Site> grantSites;

    @Column(nullable = false)
    public UserRoleType getRole() {
        return role;
    }

    @ManyToOne(optional = false, fetch=FetchType.LAZY)
    public User getGranter() {
        return granter;
    }

    @ManyToOne(optional = false, fetch=FetchType.LAZY)
    public User getGrantee() {
        return grantee;
    }

    @ManyToMany
    public Collection<Site> getGrantSites() {
        return grantSites;
    }
}

我想要提出的是一个查询,它将找到GrantedRole特定授予者给出的所有Site' 在他们的grantSites集合中具有一个或多个指定的 '。所以像:

SELECT g FROM GrantedRole g WHERE g.granter = :granter AND 
    g.grantSites [contains at least one of] (:sites) 

...但我不确定使用什么语法[contains at least one of],或者是否可以使用 JPA/HQL。有什么建议么?

4

1 回答 1

2

我能够通过调整此处找到的答案来完成这项工作:

通过 HQL 检查两个集合的交集

具体来说:

SELECT DISTINCT g FROM GrantedRole g, Site s WHERE g.granter = :granter 
    AND s IN (:sites) AND s IN ELEMENTS(g.grantSites) 
    ORDER BY g.grantee.firstName ASC, g.grantee.lastName ASC
于 2013-01-03T00:55:11.327 回答