IN(x, y, z) 执行 OR 运算,我需要一个类似的函数对列表输入执行 AND 运算。
我有一个实体用户
,它有一个角色
列表
@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'
最佳答案
你能用这个试试你的代码吗
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();
关于java - HQL 查询类似于 IN(x, y, z) 但 ALL(x, y, z),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25199846/