You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

原生SQL查询转换为HQL查询咨询,附订单表筛选条件与示例

Order表多条件查询HQL实现方案

假设你的Hibernate实体类命名为Order,类属性和表字段映射为驼峰格式(OrderId对应orderId、UserId对应userId、status对应status、orderDate对应orderDate),可直接使用如下简洁HQL语句:

SELECT o
FROM Order o
WHERE 
  o.status = 'In-Progress'
  AND o.userId NOT IN (
    SELECT DISTINCT userId 
    FROM Order 
    WHERE status = 'Validating'
  )
  AND o.orderDate = (
    SELECT MIN(orderDate) 
    FROM Order 
    WHERE userId = o.userId
  )

逻辑说明

  • o.status = 'In-Progress' 直接筛选所有状态为进行中的订单,匹配第一个要求
  • NOT IN 子查询过滤掉所有名下存在Validating状态订单的用户,匹配第二个要求
  • 关联子查询取当前用户的最早下单日期,匹配后即可得到该用户最早的符合要求的订单,匹配第三个要求

注意:如果你的orderDate字段在实体类中是字符串类型,需要确保日期格式是可正确排序的,否则MIN函数返回的结果可能不符合预期,建议使用日期类型存储该字段。

如果需要和你提供的原生SQL逻辑完全对齐的JOIN写法,也可以使用如下版本:

SELECT t1
FROM Order t1,
  (SELECT userId as uid, MIN(orderDate) as minDate FROM Order GROUP BY userId) t2
WHERE 
  t1.userId = t2.uid
  AND t1.orderDate = t2.minDate
  AND t1.userId NOT IN (SELECT userId FROM Order WHERE status = 'Validating')
  AND t1.status = 'In-Progress'

内容的提问来源于stack exchange,提问作者utpal sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:57:04