如何将列表与 JPA Hibernate 中存在的所有值完全匹配?

2024-04-13

我有一个User实体与skills属性作为类型列表。我想查询的是User表格对照技能列表,如果所有技能都出现在技能列中,则仅找到匹配项,除非没有。

我为此使用了 JPQL,但它使用以下命令逐一匹配列表中的每个元素IN clause.

用户等级

@Entity(name = "App_User")
//table name "user" is not allowed in postgres
public class User {
    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
    @Column(name = "user_id", updatable = false, nullable = false)
    @Setter(AccessLevel.NONE)
    private UUID id;

    @Column(name = "user_name")
    @NotBlank(message = "Name is mandatory")
    private String name;

    @Column(name = "user_email")
    @NotBlank(message = "Email is mandatory")
    private String email;

    //    Current point balance of the user
    @Column(name = "points")
    private int points;

    @ElementCollection(fetch = FetchType.EAGER)
    @Column(name = "skills")
    @NotEmpty
    private List<String> skills = new ArrayList();

}

我使用过的JPA查询是

SELECT u FROM App_User u JOIN u.skills skill where skill in :skillList

如果我想匹配这样的技能列表Arrays.asList("skill1","skill2","skill3")那么我只想要结果中那些拥有所有这些技能的用户,而不是一两个。以上使用IN子句返回相同的结果。

我读过,不可能在 JPQL 中比较两个列表,所以我如何使用来实现这一点CriteriaBuilder CriteriaQueryAPI?


你可以这样做

@Query(value = "SELECT u FROM User u LEFT JOIN u.skills sk WHERE sk IN :skillList"
           + " GROUP BY u HAVING COUNT( sk) = :skillListSize")
List<User> findBySkills(@Param("skillList") List<String> skills,
                                 @Param("skillListSize") long skillListSize);

在这里,按用户分组,然后检查具有所有技能或不使用大小的组。因此,它将获取具有所赋予的所有技能的所有用户。

或者使用这种方式

@Query(value = "SELECT u FROM User u LEFT JOIN u.skills sk GROUP BY u"
           + " HAVING SUM(CASE WHEN sk IN (:skillList) THEN 1 ELSE 0 END) = :skillListSize")
List<User> findBySkills(@Param("skillList") List<String> skills,
                                 @Param("skillListSize") long skillListSize);

如果您想要为具有完全相同技能但不超过给定列表的用户提供解决方案,请参阅此solution https://stackoverflow.com/a/62664681/4207306.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将列表与 JPA Hibernate 中存在的所有值完全匹配? 的相关文章

随机推荐

  • Join 中的用例声明

    大家好 我想使用此查询在连接中使用 case 语句 但出现错误 Select CONVERT VARCHAR 10 SII SIDATE 103 DATE SII SALEID SII ItemName SI TenancyID FROM
  • 在 Mongoose 中使用 AND 组合两个 OR 查询

    我想在 Mongoose 中使用 AND 组合两个 OR 查询 就像这个 SQL 语句一样 SELECT FROM WHERE a 1 OR b 1 AND c 1 OR d 1 我在 NodeJS 模块中尝试了此操作 该模块仅从主应用程序
  • 在 SQL 中比较图像

    与数据库中的图像进行比较的最佳方法是什么 我尝试比较它们 Image 是 Image 类型 Select from Photos where Photo Image 但收到错误 数据类型图像和图像在等于运算符中不兼容 由于图像数据类型是二进
  • 在 Twitter Fabric 中使用自定义登录按钮?

    我一直在尝试使用普通按钮来使用 twitter sdk 执行身份验证过程 但它似乎不起作用 有人尝试过类似的事情吗 我已经正确设置了 API 密钥等 登录过程正确执行 但回调部分似乎没有被调用 我的日志都没有被执行 成功或失败部分都没有 T
  • 具有多个逗号分隔值的返回语句[重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript 语法 逗号是什么意思 https stackoverflow com questions 3561043 javascript syntax what comma means 这
  • 使用jsPDF在服务器端保存pdf

    我有一个应用程序 可以生成一个 HTML 页面 其中包含用户可以编辑的数据 最后我用 jsPDF 生成了一个 pdf 文件 有什么方法可以将生成的 pdf 保存在服务器端数据库中吗 我正在使用 PrimeFaces 提前致谢 为其他用户更新
  • 如何强制 Typescript 中的所有变量都声明类型

    据我所知 当你在Typescript中声明变量时 你可以选择是否为变量指定类型 如果未指定类型 则使用默认的 any 类型 有没有办法强制所有变量都声明类型 即使它可能是 任何 例如 当未指定类型时 我希望出现编译器错误 这样一来 程序员将
  • 如何使 Django slugify 与 Unicode 字符串正常工作?

    我能做什么来预防slugify过滤器去除非 ASCII 字母数字字符 我使用的是 Django 1 0 2 编程网 http cnprog com有问题的网址中有中文字符 所以我查看了他们的代码 他们没有使用slugify在模板中 相反 他
  • Ace 代码编辑器动态设置语言 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我正在尝试通过下拉菜单来选择语言来实现 Ace 代码编辑器 我的下拉菜单有一个模式 ID 我已经让编辑器正常工作 但我无法像我希望
  • JNI 和 Java:ant 调用 make 还是 make 调用 ant?

    我即将第一次进入 JNI Java 本机接口 的世界 以提供从平台特定的 C C 代码到 Java 的文件系统更改通知 除非有人推荐一些我错过的出色的图书馆来做这件事 作为 JNI 的新手 我已经设法找到了很多关于 JNI 接口方面和库生成
  • 避免从存储过程返回结果集

    假设我有一些返回结果集的存储过程 并且我无法更改它 create procedure test procedure as begin select 1 end 我知道我可以将结果集插入表中 因此它将对调用代码隐藏 declare t tab
  • Worklight 在线 + 离线身份验证

    我正在尝试通过 Worklight 实现以下目标 我的应用程序有两组功能 仅当应用程序连接到服务器并且用户经过身份验证时才能访问一组功能 另一组功能可以离线访问 但它们需要来自加密 JSONStore 的数据 我在客户端设备上有一个 JSO
  • 距离矩阵的并行构造

    我对大量多维向量进行层次凝聚聚类 我注意到最大的瓶颈是距离矩阵的构造 此任务的简单实现如下 此处使用 Python v an array N d where rows are the observations and columns the
  • 运行 Jest 时 NextJS 中未定义环境变量

    我设置了一个简单的 NextJS 项目 但在让 Jest 识别我的环境变量时遇到问题 我已按照以下说明进行操作https nextjs org docs basic features environment variables test e
  • 微服务版本控制

    就在运行时支持同一服务的多个版本化部署以及消费者如何使用不同版本而言 适应基于微服务的架构中的版本控制的最佳实践是什么 1 如果我们使用基于路由的版本控制作为提到的方法之一here http niels nu blog 2016 micro
  • 选择除第一个之外的所有“tr”

    我怎样才能选择全部tr除第一个元素之外的元素tr在带有 CSS 的表格中 我尝试使用this http www daniel lemire com blog archives 2008 08 22 how to select even or
  • 如何将函数中的多个变量移至全局范围?

    我是Python新手 我正在努力创建一个类似游戏的垄断 并且正在研究程序的设置方面 我有一个函数询问用户他们想要为每个设置输入什么 然后我使用另一个函数将这些设置导入到文本文件中 以便可以存储它们以供以后使用 也可以让程序将它们用作设置 这
  • 如何识别 RDP / MSTSC 登录失败的情况?

    我正在使用 RDP MSTSC 的 C 实现MsRdpClient9NotSafeForScripting 类 https learn microsoft com en us windows win32 termserv imstscaxe
  • 如何决定使用什么——双精度还是小数? [复制]

    这个问题在这里已经有答案了 可能的重复 十进制与双精度 我应该使用哪一种以及何时使用 https stackoverflow com questions 1165761 decimal vs double which one should
  • 如何将列表与 JPA Hibernate 中存在的所有值完全匹配?

    我有一个User实体与skills属性作为类型列表 我想查询的是User表格对照技能列表 如果所有技能都出现在技能列中 则仅找到匹配项 除非没有 我为此使用了 JPQL 但它使用以下命令逐一匹配列表中的每个元素IN clause 用户等级