1
我試圖將此SQL查詢轉換爲Hibernate標準,但我不太清楚Hibernate的新特性。使用休眠條件按子查詢結果進行排序
SELECT header.*,
(SELECT items.end_date from
subTable sub,
ItemTable items
WHERE items.sub_id = sub.sub_id
and header.header_id = sub.header_id
order by items.end_date desc
limit 1) as latestEndDate
from headerTable header
order by latestEndDate desc;
我可以創建子查詢,但我在與如何將其合併到主查詢的損失。
Long headerId = getHeaderId();
Criteria criteria = session.createCriteria(dataaccess.model.Item.class, "item");
DetachedCriteria headerSubQuery =
DetachedCriteria.forClass(dataaccess.model.Header.class, "header")
.setProjection(Property.forName("header.headerId"))
.add(Restrictions.eq("headerId, headerId));
DetachedCriteria subTableQuery =
DetachedCriteria.forClass(dataaccess.model.SubTable.class, "sub")
.setProjection(Property.forName("sub.subId)).add(
Property.forName("header").in(headerSubQuery));
criteria.add(Property.forName("sub").in(subTableQuery));
criteria.addOrder(Order.desc("endDate"));
criteria.setMaxResults(1);
List<Items> items = criteria.list();
* HeaderTable和SubTable具有1:1的關係,僅適用於傳統原因。 SubTable擁有Items,但由於1:1關係,HeaderTable也擁有Items(HeaderTable - > SubTable - > Items)。
該查詢返回帶有最新endDate的項目。我希望能夠使用Hibernate查詢頭表並根據最新的endDate對其中一個項目(如上面的SQL查詢)進行排序。
感謝您的任何幫助。