我正在尝试使用以下代码从MySQL表中提取“体验”对象列表。每种体验都有一个from datetime列和一个to datetime列,我只想在今天的日期介于from和to之间的地方拉行。
MySQL
datetime
我正在使用从Hibernate运行的JPA 2.0。
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();
我的问题是,builder.between()显然不允许我传递Date对象。
builder.between()
我的问题有更好的解决方案吗?
您可以将其作为参数传递:
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(),等
builder.currentDate()
builder.currentTimestamp()