将Hibernate条件查询转换为JPA2条件查询

将Hibernate条件查询转换为JPA2条件查询,hibernate,session,jpa-2.0,criteria-api,criteriaquery,Hibernate,Session,Jpa 2.0,Criteria Api,Criteriaquery,我有以下Hibernate 3.x条件查询,我想将其转换为Hibernate JPA 2.0查询: Calendar calLo = new GregorianCalendar(); calLo.set(Calendar.HOUR_OF_DAY, 00); calLo.set(Calendar.MINUTE, 00); calLo.set(Calendar.SECOND, 00); Calendar calHi = new GregorianCalendar(); calHi.set(Calen

我有以下Hibernate 3.x条件查询,我想将其转换为Hibernate JPA 2.0查询:

Calendar calLo = new GregorianCalendar();
calLo.set(Calendar.HOUR_OF_DAY, 00);
calLo.set(Calendar.MINUTE, 00);
calLo.set(Calendar.SECOND, 00);
Calendar calHi = new GregorianCalendar();
calHi.set(Calendar.HOUR_OF_DAY, 23);
calHi.set(Calendar.MINUTE, 59);
calHi.set(Calendar.SECOND, 00);

List taskList = session.createCriteria(Task.class, "task").add(Restrictions.ge("task.taskDate", calLo.getTime())).add(Restrictions.le("task.taskDate", calHi.getTime())).add(Restrictions.eq("task.taskActive", true)).addOrder(Order.desc("task.taskNo")).list();
我尝试重新编写代码,如下所示:

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(Task.class);
Root task = cq.from(Task.class);
cq.select(task).where(cb.ge("task.taskDate", calLo.getTime()) ... );
但是JPA2标准查询似乎不支持CriteriaBuilder.ge(…)方法接受日期或日历作为输入参数,我的代码似乎从一开始就失败了


我需要建议来保留和调整Hibernate会话标准的功能。

如图所示,
ge()
方法用于数字。使用,它接受任何
可比较的

我做了上述工作,但遇到了以下类似问题,不明白为什么:
cq.select(kme).where(cb.equal(kme.get(“mcode”)、mcode.getTheCode()、cb.greaterThanOrEqualTo(kme.get(“daDate”)、someJavaUtilDate)错误为“找不到适用于greaterThanEqualTo(javax.persistence.criteria.Path,java.util.Date)的合适方法”,您需要使用
kme.get(“daDate”)
以适当的类型获得第一个参数。或者最好使用生成的元模型类而不是字符串。