2

次のHibernate3.xCriteriaクエリがあり、HibernateJPA2.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()) ... );

しかし、JPA 2基準クエリは、入力パラメーターとして日付またはカレンダーを受け入れるCriteriaBuilder.ge(...)メソッドをサポートしていないようで、コードは最初から失敗しているようです。

Hibernateセッション基準の機能を保持および適応させるためのアドバイスが必要です。

4

1 に答える 1

6

javadocが示すように、メソッドge()は数値用です。anyを受け入れるgreaterThanOrEqualTo()を使用しますComparable

于 2012-03-16T12:05:26.257 に答える