2
我有,我想將其轉換爲一個Hibernate JPA 2.0查詢以下的Hibernate 3.x的條件查詢:轉換一個Hibernate條件查詢到JPA 2個標準查詢
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();
我試圖重新werite的開始喜歡代碼:
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()) ...);
但JPA 2標準的查詢好像不支持CriteriaBuilder.ge(...)方法,以接受日期的日曆作爲輸入參數和我的代碼似乎從一開始就失敗。
我需要建議來保留和調整Hibernate會話標準的功能。
我做了上述工作,但陷入類似的問題與以下,不明白爲什麼:'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) –
Skyhan
2012-03-21 09:25:25
你需要使用'kme。 get(「daDate」)'具有適當類型的第一個參數。或者最好使用生成的元模型類而不是字符串。 –
2012-03-21 09:56:11