JPQL查询帮助:由集合过滤的多对多关系

时间:2015-12-03 20:49:35

标签: jpql

我在使用JPQL编写查询时遇到问题。我有两个具有多对多关系的实体:

Entity1(用户)

@Entity
public class User implements Serializable {

    @Id
    private long id;
    private String name;

    @ManyToMany()
    @JoinTable(name="users_roles", 
        joinColumns=@JoinColumn(name="user_id"),
        inverseJoinColumns=@JoinColumn(name="role_id"))
    private Set<Role> roles;
}

实体2(角色)

@Entity
public class Role implements Serializable {
    @Id
    private long id;
    private String name;
}

想象一下,我有一个可以在大小上变化的角色列表(例如“roleA”,“roleB”,“roleC”,...),我想让每个在此列表中拥有所有角色的用户。在我的脑海里,它会是这样的:

select u from users u where :roles member of u.roles

据我所知,这不起作用,因为:在“成员”的左侧使用时,角色不能是一个集合。有没有办法在一个JPQL查询中实现这一点?如果在单个查询中不可能,那么最好的方法是什么?

由于

1 个答案:

答案 0 :(得分:0)

试试这个:

select u FROM User u JOIN u.roles r WHERE r IN (:roles)