使用JPA / Hibernate Criteria在日期之间拉

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

我正在使用JPA 2.0运行Hibernate。

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

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

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

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

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

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

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

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

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

你应该切换你的参数:

 builder.between(root.get("dateColumn"), startDate, endDate); 

这个链接看起来很有希望: http : //www.javalobby.org/articles/hibernatequery102/

您可以使用criteria.ge("date", root.get("from"));criteria.le("date"), root.get("to")); 创造克劳斯之间

如果那些不可用,那么您可能需要考虑编写HQL。