1

次のGrantedRoleように、特定の役割を 1 つ以上にわたって付与できるクラスがあります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指定された が 1 つ以上含まれています。次のようなものです:SitegrantSites

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 を介して 2 つのコレクションの交差を確認する

具体的には:

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 に答える