HQL查询,如IN(x,y,z)但是ALL(x,y,z)

时间:2014-08-08 09:11:58

标签: java database persistence hql

IN(x,y,z)执行OR运算,我需要一个类似的函数对列表输入执行AND运算。

我有一个实体User,其列表为Roles

@Entity
public class User {

    @ManyToMany
    private List<Role> roles;

    ....
}

我需要一个查询来提取具有ADMIN AND EMPLOYEE角色的所有用户。示例用户A是EMPLOYEEADMIN,用户B是EMPLOYEE:用户A将被选中。

以下作品,但我想知道是否有更优雅的方法:

SELECT u FROM User u JOIN u.roles r JOIN u.roles s WHERE r.name='ADMIN' AND s.name='EMPLOYEE'

我正在寻找一个类似IN的功能,也许就像ALL?

以下不起作用!

SELECT u FROM User u JOIN u.roles r WHERE r.name IN('ADMIN', 'EMPLOYEE')

值得注意的是,这不起作用:

SELECT u FROM User u JOIN u.roles r WHERE r.name='ADMIN' AND r.name='EMPLOYEE'

1 个答案:

答案 0 :(得分:2)

你能用这个

试试你的代码吗?
    String[] tags = {"ADMIN", "EMPLOYEE"};
String hql = "select u from User u " +
                "join u.roles r " +
                "where r.name in (:tags)" +
                "group by u " +
                "having count(r)=:tag_count";
Query query = session.createQuery(hql);
query.setParameterList("tags", tags);
query.setInteger("tag_count", tags.length);
List<User> Users = query.list();