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

Spring Boot Criteria Builder日期查询条件失效问题排查

解决Criteria Builder日期查询条件失效问题

你的核心问题是多次调用query.where()会覆盖之前的所有查询条件,最终只有最后一个equal(fileType)的条件生效,导致日期筛选逻辑被完全忽略,所以返回了所有符合文件类型的记录,而非指定日期范围的结果。

修正后的代码

Session session = sessionFactory.getCurrentSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<FilesInfoModel> query = builder.createQuery(FilesInfoModel.class);
Root<FilesInfoModel> root = query.from(FilesInfoModel.class);

Timestamp startTimestamp = Timestamp.valueOf(restrictProfileDateTime);
Timestamp endTimestamp = Timestamp.valueOf(restrictProfileDateTime.plusDays(1));

// 分别定义各个查询条件
Predicate dateStartPredicate = builder.greaterThanOrEqualTo(root.get("createdDate"), startTimestamp);
Predicate dateEndPredicate = builder.lessThanOrEqualTo(root.get("createdDate"), endTimestamp);
Predicate fileTypePredicate = builder.equal(root.get("fileType"), deltaScreeningFileType);

// 用and组合所有条件,一次性传入where方法
query.where(builder.and(dateStartPredicate, dateEndPredicate, fileTypePredicate));

query.select(root);
List<FilesInfoModel> filesInfoList = session.createQuery(query).getResultList();

额外检查点

  • 确认restrictProfileDateTime的时间部分是否为00:00:00,这样plusDays(1)得到的次日零点能准确覆盖目标日期的所有时间范围
  • 检查FilesInfoModel中createdDate字段的映射是否正确,确保和SQL Server的datetime2类型匹配(通常使用@Column(columnDefinition = "datetime2")或默认的Timestamp映射即可)

内容的提问来源于stack exchange,提问作者Parth Atara

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:52:22