使用 JPA/休眠条件在日期之间拉取

2022-09-05 00:08:18

我正在尝试使用以下代码从表中提取体验对象的列表。每个体验都有一个 from 列和一个 to 列,我只想拉动今天的日期介于 from 和 to 之间的行。MySQLdatetimedatetime

我正在使用JPA 2.0运行Hibernate。

    Date currentDate = new Date();
    CriteriaBuilder builder = entityManager.getCriteriaBuilder();
    CriteriaQuery<Experience> query = builder.createQuery(Experience.class);
    Root<Experience> root = query.from(Experience.class);
    builder.between(currentDate, root.get("from"), root.get("to"));
    return entityManager.createQuery(query).getResultList();

我的问题是,显然不允许我传递Date对象。builder.between()

有没有更好的解决方案来解决我的问题?


答案 1

您可以将其作为参数传递:

ParameterExpression<Date> d = builder.parameter(Date.class);
builder.between(d, root.<Date>get("from"), root.<Date>get("to")); 
return entityManager.createQuery(query)
    .setParameter(d, currentDate, TemporalType.DATE).getResultList(); 

请注意,在这种情况下,您需要指定所需的时态类型。

您也可以依赖数据库的当前日期:、 、 等builder.currentDate()builder.currentTimestamp()


答案 2

你只是错过了对 CriteriaBuilder.literal() 的调用:

Date currentDate = new Date();
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Experience> query = builder.createQuery(Experience.class);
Root<Experience> root = query.from(Experience.class);
builder.between(builder.literal(currentDate), root.get("from"), root.get("to"));
return entityManager.createQuery(query).getResultList();

推荐