IN(x,y,z)执行OR运算,我需要一个类似的函数对列表输入执行AND运算。
我有一个实体User
,其列表为Roles
@Entity
public class User {
@ManyToMany
private List<Role> roles;
....
}
我需要一个查询来提取具有ADMIN AND EMPLOYEE角色的所有用户。示例用户A是EMPLOYEE
和ADMIN
,用户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'
答案 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();