У меня есть огромные трудности для достижения чего-то, что я думаю, должно быть довольно легко.Критерии API. Сортировать по последнему ребенку
В основном у меня есть OrderBean и OrderInsertBean. Они оба отображаются объекты в таблицу mySQL. OrderBean может иметь несколько OrderInsertBeans, а OrderInsertBean имеет только один OrderBean.
Im writing Hibernate Criteria запрашивает построение динамического запроса, который будет искать и сортировать результаты из этих таблиц. В основном он работает нормально, за исключением случаев, когда я пытаюсь сортировать заказы на следующий OrderInsertBean.
Вы видите, что у OrderInsertBean есть insertDate, и для каждого ордера я хочу выбрать первый OrderInsert, который имеет insertDate больше, чем сегодня, и сортировать заказы к этой дате.
Простой в простом SQL. Может быть записано несколько способов, но это один из способов сделать это:
select o.*, (select min(oi2.insertDate)
from AIDA_ORDER_INSERT oi2 where oi2.insertDate > curdate()
and oi2.orderId = o.orderId) as insertDateNew
from AIDA_ORDER o
order by insertDateNew
Но как * это может быть записано как критерии запроса Hibernate? Или запрос на получение запроса JPA 2 также хорош.
Это, насколько я получил ...
Criteria crit = session.createCriteria(OrderBean.class, "order");
DetachedCriteria subquery = DetachedCriteria.forClass(OrderInsertBean.class, "oi");
subquery.add(Restrictions.ge("oi.insertDate", new Date()));
ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.min("oi.insertDate"));
projectionList.add(Projections.groupProperty("oi.orderId"));
subquery.setProjection(projectionList);
// How to add the subquery to the main query to get the desired results??
// Finally ordering the results:
crit.addOrder(Order.asc("insertDateNew"));
Я думаю, что мне нужно, чтобы каким-то образом добавить подзапрос критериям списка выбора, дать ему псевдоним, а затем упорядочить по нему .. .
Но я застрял и не знаю, куда идти. Может ли кто-нибудь помочь бедному человеку?
Благодаря
Ну, дух ... Да. Этот addOrder не является проблемой здесь. Это я под контролем. Трудная вещь заключается в том, как я могу добавить подзапрос в основной запрос, чтобы получить результаты, определенные выше. В настоящее время мой код не работает вообще. – user829237
addOrder не был в вашем вопросе, когда я прокомментировал это, казалось, был очевидным ответом (для меня). – evandongen