java - HQL 查询类似于 IN(x, y, z) 但 ALL(x, y, z)

标签 java database persistence hql

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

我有一个实体用户,它有一个角色列表

@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'

最佳答案

你能用这个试试你的代码吗

    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/

相关文章:

sql - 在简单的 SQL 查询中级联选择

eclipse - javax.persistence jar 未加载到 tomcat 中

java - 有状态 session bean 与持久实体

java - 错误 400 : Bad Request involving Timestamp within JSON object

java - Web应用程序: When user submits a second request before the 1st one is "finished" the browser shows the output of the first req.为什么?

sql-server - Visual Studio 中的 SQL Server 数据库创建脚本

java - 维护 php 和 java 应用程序之间的 session /连接

java - GridBagConstraints weightx 和 weighty 值

java - Spring-Data-Neo4J:如何登录远程服务器?

java - Hibernate比sql查询慢1000倍