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

如何为Hibernate 3编写Java Criteria Query实现日期区间查询

Hibernate 3 Criteria Query: 实现created_at日期范围筛选

嘿,我来帮你补全这个Criteria Query,实现你要的日期范围筛选逻辑——从some_table(对应实体MyEntity)中查询created_at介于当前日期减8天到当前日期减2天之间的数据。

基于你给出的JPA CriteriaBuilder初始代码,补全后的完整实现:

CriteriaBuilder builder = sessionFactory.getCriteriaBuilder();
CriteriaQuery<MyEntity> criteria = builder.createQuery(MyEntity.class);

Root<MyEntity> root = criteria.from(MyEntity.class);

// 调用MySQL的DATE_SUB函数,计算8天前和2天前的日期
Expression<Date> eightDaysAgo = builder.function(
    "DATE_SUB", 
    Date.class, 
    builder.currentDate(), 
    builder.literal(8), 
    builder.literal("DAY")
);
Expression<Date> twoDaysAgo = builder.function(
    "DATE_SUB", 
    Date.class, 
    builder.currentDate(), 
    builder.literal(2), 
    builder.literal("DAY")
);

// 创建日期区间筛选条件:created_at介于两个日期之间
Predicate dateRangePredicate = builder.between(root.get("createdAt"), eightDaysAgo, twoDaysAgo);

// 将筛选条件添加到查询中
criteria.where(dateRangePredicate);

// 执行查询并获取结果(如果需要执行的话)
TypedQuery<MyEntity> query = sessionFactory.createEntityManager().createQuery(criteria);
List<MyEntity> results = query.getResultList();

代码说明:

  • 用builder.function()直接调用数据库的DATE_SUB函数,确保逻辑和你给出的SQL完全一致;
  • builder.currentDate()获取数据库的当前日期,和SQL里的curdate()对应;
  • root.get("createdAt")对应实体中映射created_at字段的属性名(JPA默认驼峰转下划线,所以实体属性名如果是createdAt,会自动映射到数据库的created_at);
  • 最后通过TypedQuery执行查询,拿到符合条件的MyEntity列表。

如果你用的是Hibernate原生的Criteria API(而非JPA Criteria),写法会更简洁:

// 假设你已经获取了Hibernate Session
Session session = sessionFactory.openSession();
Criteria criteria = session.createCriteria(MyEntity.class);

// 计算日期区间(可借助Apache Commons Lang的DateUtils,或自行实现日期加减)
Date eightDaysAgo = DateUtils.addDays(new Date(), -8);
Date twoDaysAgo = DateUtils.addDays(new Date(), -2);

// 添加区间筛选条件
criteria.add(Restrictions.between("createdAt", eightDaysAgo, twoDaysAgo));

// 执行查询
List<MyEntity> results = criteria.list();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:12:02