2013-07-12 3 views
0

я должен написать, что HQL запрос:Простой запрос HQL и критерии в Hibernate

FROM Sending adp WHERE adp.id = (SELECT MAX (adpw.id) FROM Sending adpw WHERE adpw.place = adp.place) 

я должен использовать критерии API, и я не могу справиться. Запрос возвращает последние отправления из всех мест в базе данных, и он работает очень хорошо, но теперь я должен преобразовать его в критерии. Единственное, что мне удалось - показать только одно место со следующим кодом:

Criteria criteria = getSession().createCriteria(
        Sending.class); 
criteria.setFetchMode("place", FetchMode.JOIN); 
DetachedCriteria maxId = DetachedCriteria.forClass(Sending.class).setProjection(Projections.max("id")); 
criteria.add(Property.forName("id").eq(maxId)); 

Помогло бы вам? Заранее спасибо!!

+0

В чем проблема с кодом Критерии, который вы указали? Это не работает? Это дает неправильные результаты? – mthmulders

+0

Я получаю только один результат. Единственный с max id - отправка с максимальным id. И он должен вернуть более 350 - последняя отправка с каждого места. –

ответ

0

Извините, что ответили на мой вопрос, но я нашел решение.

Я забыл, что подзапросы могут быть связаны друг с другом. Я понял мой запрос со следующим кодом:

Criteria criteria = getSession().createCriteria(Sending.class); 
DetachedCriteria dc = DetachedCriteria.forClass(Sending.class, "adpw"); 
dc.add(Restrictions.eqProperty("adpw.place", "adp.place")); 
dc.setProjection(Projections.max("id")); 
criteria.add(Property.forName("id").eq(dc)); 
criteria.setMaxResults(count).setFirstResult(start); 
return criteria.list(); 

Все работает сейчас очень хорошо.

Смежные вопросы