2012-03-16 69 views
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會話標準的功能。

回答

5

由於the javadoc表示,ge()方法是用於數字。使用greaterThanOrEqualTo(),它接受任何Comparable

+0

我做了上述工作,但陷入類似的問題與以下,不明白爲什麼:'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

+1

你需要使用'kme。 get(「daDate」)'具有適當類型的第一個參數。或者最好使用生成的元模型類而不是字符串。 – 2012-03-21 09:56:11